2014-04-29 11 views
9

Kiedy próbuję opublikować dane w moim pliku CGI, mój plik CGI mówi, że rzeczywiste dane postów są nieprawidłowe. Używam HTML/JavaScript dla front end i Python dla backendu.Dane POST do pliku CGI przy użyciu XMLHttpRequest powoduje BadHeader

Works:

<form name="login" action="/cgi-bin/register.py" method="POST"> 
Username:<input type="text" name="username"><br> 
Password:<input type="password" name="password"><br> 
Confirm password:<input type="password" name="confirmpassword"><br> 
</form> 

to jednak powoduje, że strona, aby odświeżyć. Próbuję tego uniknąć i wyświetlać tekst na tej samej stronie (bez ponownego ładowania). Dlatego wybrałem użycie XMLHTTPRequest do asynchronicznego przetwarzania tego zdarzenia.

To jest to, co chcę osiągnąć:

<script> 
function validateLogin() 
{ 
var username = document.getElementById("username").value; 
var password = document.getElementById("password").value; 

if (username.length <= 0 || password.length <= 0) 
    { 
    document.alert("The username or password cannot be blank"); 
    return; 
    } 

var xmlhttp; 

    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("resultText").innerHTML=xmlhttp.responseText; 
     }else if (xmlhttp.readyState==4) { 
      document.write(xmlhttp.status + xmlhttp.statusText); 
     } 
} 

xmlhttp.open("POST","/cgi-bin/login.cgi",true); 
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8') 
xmlhttp.send("username=" + username + "&password=" + password); 
} 
</script> 

CGI Plik:

#!/usr/bin/python 

import cgi 
from dbmanager import openConnection 
from passlib.hash import sha256_crypt 

s = "Content-type: text/html\n\n\n" 

form = cgi.FieldStorage() 

username = form["username"].value 
password = form["password"].value 
message = None 

Dostaję błąd w Pythonie stwierdzające Bad header=FieldStorage(None, None,

nie dostać ten błąd, gdy Robię to pierwszy sposób, ale drugi sposób daje mi ten błąd. I potrzebuję do pracy w drugą stronę.

Odpowiedz

-1

JavaScript nie publikuje prawidłowych wartości z powodu złych właściwości elementów HTML.

Spróbuj zmienić właściwość elementów username i passwordname w id własności zgodnie z żądaniem kodu JavaScript.

Rezultatem będzie coś takiego:

<form name="login" action="/cgi-bin/register.py" method="POST"> Username:<input type="text" id="username"><br> Password:<input type="password" id="password"><br> Confirm password:<input type="password" id="confirmpassword"><br> </form>

3

Echo Server:

HTML:

<html> 
<head> 

<script> 
function validateLogin() 
{ 
var username = document.getElementById("username").value; 
var password = document.getElementById("password").value; 

if (username.length <= 0 || password.length <= 0) 
    { 
    document.alert("The username or password cannot be blank"); 
    return; 
    } 

var xmlhttp; 

    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("resultText").innerHTML=xmlhttp.responseText; 
     }else if (xmlhttp.readyState==4) { 
      document.write(xmlhttp.status + xmlhttp.statusText); 
     } 
} 

xmlhttp.open("POST","../post_test.py",true); 
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8') 
xmlhttp.send("username=" + username + "&password=" + password); 
} 
</script> 
</head> 




<body> 


<form name="login" > 
Username:<input type="text" id="username"><br> 
Password:<input type="text" id="password"><br> 
Confirm password:<input type="text" id="repassword"><br> 

</form> 
<button onclick="validateLogin()">Login</button> 
<span id="resultText"></span> 
</body> 
</html> 

CGI-SCRIPT:

#!/usr/bin/python2.7 

import cgi 


form = cgi.FieldStorage() 
print "Content-Type: text/html;charset=utf-8" 
print "Access-Control-Allow-Origin:*" 
print 
print form 

Zastąp typ wejścia password na text, ponieważ dostał błędy bezpieczeństwa!

Yo otrzymała złą odpowiedź na skrypcie cgi. Kto zna usługę na żywo? Więc trzeba jakiś rodzaj, status, nagłówek, treść ..

Sprawdź adres pocztowy: ..// oznaczać currient_uri + new_path + target

Na javascript: Zadzwoń przez ID ale gdzie parametru ID?

Powiązane problemy