2014-04-29 11 views
9

का कारण बनता है जब मैं अपनी CGI फ़ाइल में डेटा पोस्ट करने का प्रयास करता हूं, तो मेरी CGI फ़ाइल का कहना है कि वास्तविक पोस्ट डेटा अमान्य है। मैं बैकएंड के लिए फ्रंट एंड और पायथन के लिए एचटीएमएल/जावास्क्रिप्ट का उपयोग कर रहा हूं।XMLHttpRequest का उपयोग कर CGI फ़ाइल में POST डेटा BadHeader

काम करता है:

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

हालांकि, इस पृष्ठ ताज़ा करने के लिए कारण बनता है। मैं इससे बचने की कोशिश कर रहा हूं और उसी पृष्ठ के भीतर टेक्स्ट डिस्प्ले (बिना रीलोडिंग के)। इसलिए, मैंने इस घटना को संक्रमित रूप से संसाधित करने के लिए XMLHTTPRequest का उपयोग करना चुना है।

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

सीजीआई फ़ाइल::

यह मैं क्या हासिल करना चाहते है

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

मैं बताते हुए अजगर में कोई त्रुटि हो रही है Bad header=FieldStorage(None, None,

मैं इस त्रुटि जब नहीं मिलता मैं इसे पहला तरीका करता हूं, लेकिन दूसरा तरीका मुझे यह त्रुटि दे रहा है। I को की आवश्यकता है ताकि यह दूसरी तरफ काम करे।

उत्तर

-1

जावास्क्रिप्ट गलत HTML तत्व गुणों के कारण सही मान पोस्ट नहीं करता है।

username और passwordid संपत्ति में आपके जावास्क्रिप्ट कोड द्वारा अनुरोध किए गए गुणों को बदलने का प्रयास करें।

<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

गूंज सर्वर के लिए::

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> 

सीजीआई-स्क्रिप्ट:

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

परिणाम कुछ इस तरह हो जाएगाइनपुट प्रकार password को text पर बदलें क्योंकि सुरक्षा बग प्राप्त हुई है!

यो को सीजीआई स्क्रिप्ट पर गलत जवाब मिला। कौन जानता है कि सेवा लाइव है? तो कुछ प्रकार, स्थिति, शीर्षक, सामग्री की जरूरत है ..

चेक पोस्ट का पता: ..// मतलब currient_uri + new_path + target

जावास्क्रिप्ट पर: आईडी लेकिन जहां आईडी पैरामीटर द्वारा कॉल?

संबंधित मुद्दे