0

前几天我在堆栈溢出中看到如何使用函数重定向..但它在这里不起作用

#!/Python27/python
import cgi
import cgitb ; cgitb.enable()
import MySQLdb
from datetime import datetime
f= cgi.FieldStorage()
l=f["roll"].value
def redirect(url):
    print "Content-Type: text/plain"
    print "Refresh: 0; url='%s'" % url
    print
    print "Redirecting..."

Con = MySQLdb.Connect(host="127.0.0.1", port=3306, user="root", passwd="jesus",        db="student")
cursor = Con.cursor()
sql="SELECT YEAR FROM STDDET WHERE id='%s'"%(l)
cursor.execute(sql)
data=cursor.fetchone()
cyear=datetime.now().year
cmonth=datetime.now().month
data=data[0]
data=int(data)
year=cyear-data
print year
if(year==3):
    redirect("intro.html")
elif(year==4):
     redirect("yea4.html")

即使满足 if 条件,它也不会被重定向...我收到错误格式错误的标题...请帮助!

4

1 回答 1

0

据我所知,您的脚本会产生以下响应:

Content-Type: text/plain Refresh: 0; url='x.y.com'

Redirecting...

这不是有效的 http 响应,因为缺少状态行。

如果您生成一个“有效”页面,您应该回复一个状态

HTTP/1.1 302 Found

如果您正在重定向,一个更好的主意是使用 3xx 代码之一进行回复。举个例子:

HTTP/1.1 302 Found
Location: http://www.google.fr/

HTTP/1.1 ...行必须是标题的第一行。所以它应该由print你的程序的第一个生成。请参阅Python CGI 返回 http 状态代码,例如 403?例如。

于 2013-06-16T18:46:07.633 回答