我正在尝试制作一个菜单表单,该菜单表单使用下拉菜单(此后称为D1)从多个页面中进行选择。 D1的选定值通过HTTP POST发送到Python脚本(它必须支持非常老旧的设备,因此我不能使用JS)将用户重定向到他们选择的页面。
#!C:/python36-32/python
import cgi
import cgitb
cgitb.enable()
print("Content-type: text/html")
print()
print("<html><head>")
print("")
url = cgi.FieldStorage().getvalue("D1")
#url = url + ".htm"
#print("""<meta http-equiv=\"refresh\" content=\"0\";url=\""""+url+"""\" /> """)
print("</head><body>")
print("<center>Redirection</center>")
print(url)
#for i in range len(url):
#test[i] = url[i]
print url
print(url[0])
print(url[1])
print(url[2])
#print("""<a href='"""+url+"""'>Click here if you are not redirected.</A>""")
#print(cgi.FieldStorage())
如您所见,我一直在注释此代码行,并尝试查看是否可以使它正常工作,但是我没有运气。
Print根据cgitb转储的错误消息,将“ url”变量中的输出视为字符串,但其他每个命令似乎都认为它是NoneType。我该怎么做才能解决此问题?
编辑:这是我的HTML代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>TOMROW</title>
</head>
<body bgcolor="#6699FF">
<form method="POST" target="_top" enctype="application/x-www-form-urlencoded"action="toolbar.py">
<table style="position=absolute; top=0px; width:100%;" bordercolorlight="#FFFFFF" bordercolordark="#000000" border="3">
<tr>
<td height="34" width="432"><font face="Courier New"> TOMROW</font></td>
<td height="34" width="168">
<p align="center">
<select name="D1">
<option value="Login">Login</option>
<option value="policy">Policy</option>
<option value="links">Links</option>
<option value="Signup">Sign Up</option>
<option value="Videos">Videos</option>
<option value="dload">Download</option>
<option value="contact">Contact</option>
<option value="games">Games</option>
<option value="profile">Your Profile</option>
</select>
<input type="submit" value="Go" name="B1">
</p></td>
</tr>
</table>
</form>
</body>
</html>
我为缩进较差而道歉。
答案 0 :(得分:0)
您可以尝试在浏览器中查看开发人员工具并检查HTTP请求吗? POST执行的是多部分形式还是简单的基于url的参数编码?
我通常使用REST插件为浏览器尝试yto调试cgis,并使用启用了cgi的python内置http.server:
python3 -m http.server --cgi 8000
我已经使用基于url的参数做了一些简单的测试,并且一切正常。一些其他信息将有助于缩小问题的范围。
编辑: 使用您提供的HTML对我有用:
#!/usr/bin/python3
import cgitb
import cgi
import os
cgitb.enable()
form = cgi.FieldStorage()
page= form.getvalue("D1")
base_url=os.environ["HTTP_REFERER"]
full_url=os.path.join(base_url,page)
print("Content-Type: text/html") # HTML is following
print() # blank line, end of headers
print("<meta http-equiv='refresh' content='0;{page}.html'>".format(page=full_url))
#print(os.environ)
print("<TITLE>CGI script output</TITLE>")
print("<H1>This is my first CGI script</H1>")
print("This message should never been shown, just a redirect")
您确实看到了由cgi生成的页面的闪烁,也许是尝试延迟一下并显示一条文本,指示您正在重定向。