我正在编写一个小工具来监控学校的开课情况。
我编写了一个 python 脚本,每隔几分钟就会从每个部门获取当前可用的课程。
该脚本运行正常,直到 uni 的网站开始返回:
SIS Server is not available at this time
Uni一定是屏蔽了我的服务器吧?好吧,并不是因为这是我直接从其他 PC 转到 URL 时得到的输出。但是,如果我通过 uni 网站上进行 POST 的中介表格,我不会收到该消息。
我请求的 URL 是https://s4.its.unc.edu/SISMisc/SISTalkerServlet
这就是我的 python 代码的样子:
data = urllib.urlencode({"progname" : "SIR033WA", "SUBJ" : "busi", "CRS" : "", "TERM" : "20099"})
f = urllib.urlopen("https://s4.its.unc.edu/SISMisc/SISTalkerServlet", data)
s = f.read()
print (s)
我真的很难过!似乎 python 没有发送正确的请求。起初我认为它没有发送正确的帖子数据,但我将 URL 更改为我的 localbox,并且 apache 收到的帖子数据似乎很好。
如果您想查看系统的实际运行情况,请转到https://s4.its.unc.edu/SISMisc/browser/student_pass_z.jsp并单击“以访客身份进入”按钮,然后查找“课程可用性” . (现在你知道我为什么要建造这个了!)
最奇怪的是这一直工作到上午 11 点!我以前也遇到过同样的错误,但只持续了几分钟。这告诉我,与 uni 对我的服务器的任何阻塞相比,这在某处更成问题。
更新 根据建议,我尝试使用更合法的推荐人/用户代理。结果相同。这是我尝试过的:
import httplib
import urllib
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4',"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain","Referrer": "https://s4.its.unc.edu/SISMisc/SISTalkerServlet"}
data = urllib.urlencode({"progname" : "SIR033WA", "SUBJ" : "busi", "CRS" : "", "TERM" : "20099"})
c = httplib.HTTPSConnection("s4.its.unc.edu",443)
c.request("POST", "/SISMisc/SISTalkerServlet",data,headers)
r = c.getresponse()
print r.read()