gpt4 book ai didi

javascript - 使用 XMLHttpRequest 将数据发布到 CGI 文件会导致 BadHeader

转载 作者:太空狗 更新时间:2023-10-29 13:31:39 24 4
gpt4 key购买 nike

当我尝试将数据发布到我的 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>

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

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

我在 python 中收到一个错误,指出 Bad header=FieldStorage(None, None,

当我用第一种方法时我没有得到这个错误,但是第二种方法给了我这个错误。我需要它以第二种方式工作。

最佳答案

对于回显服务器:

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 脚本:

#!/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 因为存在安全漏洞!

你在 cgi 脚本上得到了错误的答案。谁知道服务是实时的?所以需要一些类型、状态、标题、内容..

检查帖子地址:..// 意思是currient_uri + new_path + target

在 javascript 上:通过 ID 调用但 ID 参数在哪里?

关于javascript - 使用 XMLHttpRequest 将数据发布到 CGI 文件会导致 BadHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com