使用XMLHttpRequest将数据POST到CGI文件会导致BadHeader

kam*_*619 9 html javascript python cgi

当我尝试将数据发布到我的CGI文件时,我的CGI文件说实际的帖子数据无效.我使用前端的HTML/JavaScript和后端的Python.

作品:

<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>
Run Code Online (Sandbox Code Playgroud)

但是,这会导致页面刷新.我试图避免这种情况,并在同一页面中显示文本(不重新加载).因此,我选择使用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>
Run Code Online (Sandbox Code Playgroud)

CGI文件:

#!/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
Run Code Online (Sandbox Code Playgroud)

我在python声明中遇到错误 Bad header=FieldStorage(None, None,

当我第一次这样做时,我没有得到这个错误,但第二种方式是给我这个错误.我需要它以第二种方式工作.

Mat*_*set -1

由于 HTML 元素属性错误,JavaScript 不会发布正确的值。

尝试将name元素的属性username更改为 JavaScript 代码所请求的属性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>