2014-04-29 7 views
9

Wenn ich versuche, Daten in meine CGI-Datei zu veröffentlichen, sagt meine CGI-Datei, dass die tatsächlichen Post-Daten ungültig ist. Ich verwende HTML/JavaScript für das Frontend und Python für das Backend.POST-Daten in CGI-Datei mit XMLHttpRequest verursacht 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> 

Dies verursacht jedoch die Seite zu aktualisieren. Ich versuche, dies zu vermeiden und Text auf derselben Seite anzuzeigen (ohne neu zu laden). Daher habe ich entschieden, ein XMLHTTPRequest zu verwenden, um dieses Ereignis asynchron zu verarbeiten.

Dies ist, was ich erreichen will:

<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 Datei:

#!/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 

ich einen Fehler in Python immer unter Angabe Bad header=FieldStorage(None, None,

ich, wenn nicht diesen Fehler Ich mache es auf die erste Art, aber die zweite Art gibt mir diesen Fehler. I brauchen es auf die zweite Weise zu arbeiten.

Antwort

-1

JavaScript stellt aufgrund falscher HTML-Elementeigenschaften keine richtigen Werte bereit.

Versuchen Sie, die name Eigenschaft der Elemente username und password in id Eigenschaft wie von Ihrem JavaScript-Code angefordert zu ändern.

Das Ergebnis wird so etwas wie dieses:

<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

Für 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-Skript:

#!/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 

Ersetzen Sie den Eingabetyp password durch text, da Sicherheitslücken entstanden sind!

Yo hat falsche Antwort auf CGI-Skript. Wer weiß, dass Service live ist? So müssen einige Typ, Status, Kopfzeile, Inhalt ..

überprüfen Postadresse: ..//currient_uri + new_path + target

Javascript bedeuten: Aufruf von ID aber wo ID-Parameter?