为了账号安全,请及时绑定邮箱和手机立即绑定

Python:cgi.FieldStorage.getvalue(“D1”)

Python:cgi.FieldStorage.getvalue(“D1”)

梵蒂冈之花 2021-07-14 17:08:48
我正在尝试制作一个菜单表单,它使用下拉列表(此处称为 D1 )从多个页面中进行选择。D1 的选定值通过 HTTP POST 发送到 Python 脚本(它必须支持非常旧和慢的设备,所以我不能使用 JS),它将用户重定向到他们选择的页面。#!C:/python36-32/pythonimport cgiimport cgitbcgitb.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 urlprint(url[0])print(url[1])print(url[2])#print("""<a href='"""+url+"""'>Click here if you are not redirected.</A>""")#print(cgi.FieldStorage())如您所见,我一直在注释此代码的行并尝试查看是否可以使其正常工作,但我没有运气。Print 将“url”变量中的输出视为字符串,但根据 cgitb 转储的错误消息,所有其他命令似乎都认为它是 NoneType。我需要做什么来解决这个问题?
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以尝试查看浏览器中的开发人员工具并检查 HTTP 请求吗?POST 是执行多部分表单还是简单的基于 url 的参数编码?


我通常会尝试使用浏览器的 REST 插件调试 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 生成的页面的闪光,也许尝试放置延迟和指示您正在被重定向的文本。


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号