Python/urllib突然停止正常工作

2024-06-16 08:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个小工具来监控我学校的开课情况。在

我编写了一个python脚本,每隔几分钟从每个部门获取类的当前可用性。在

在uni的站点开始返回以下内容之前,脚本运行正常:

SIS Server is not available at this time 

Uni一定阻止了我的服务器对吧?嗯,不是真的,因为这是我直接从其他电脑上转到网址时得到的输出,但如果我通过uni网站上发布的中间表单,我就不会收到这个消息。在

我请求的URL是https://s4.its.unc.edu/SISMisc/SISTalkerServlet

我的python代码如下所示:

^{pr2}$

我真的被难住了!python似乎没有发送正确的请求。一开始我认为它没有发送正确的post数据,但是我将URL改为localbox,apache接收到的post数据似乎很好。在

如果您希望看到系统实际运行,请转到https://s4.its.unc.edu/SISMisc/browser/student_pass_z.jsp,然后单击“entereasguest”按钮,然后查找“courseavailability”。(现在你知道我为什么要建这个了!)在

最奇怪的是它一直工作到上午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()

Tags: 数据httpsimport服务器脚本urlposthttplib
2条回答

这篇文章并不试图修复您的代码,但建议您使用调试工具。在

从前,我正在编写一个程序,为我填写在线表格。为了确切地了解我的浏览器是如何处理帖子、cookies等的,我安装了WireShark(http://www.wireshark.org/),一个网络嗅探器。这个应用程序允许我逐块查看在IP和硬件级别上发送和接收的数据。在

您可以考虑尝试一个类似的程序并比较网络流。这可能会突出显示浏览器和脚本之间的差异。在

在看到来自一个奇怪的非浏览器用户代理字符串的多个请求后,它们可能阻止了从站点引用的用户。例如,PHP有一个名为$_SERVER['HTTP_REFERRER']IIRC的特性,它将检查将用户引用到当前页面的页面。由于您的程序没有在用户代理字符串中包含一个(您正在尝试直接访问它),因此很可能他们正在阻止您基于该字符串进行访问。尝试在http请求的头中添加一个referer,看看它是如何进行的。(最好是链接到您要访问的页面)

http://whatsmyuseragent.com/可以帮助您构建伪造的用户代理。在

然后你就可以像这样构建标题。。。在

headers = {"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"}

然后将它们作为附加参数与HTTPConnection请求一起发送。。。在

^{pr2}$

请参阅httplib上的python文档以获取进一步的参考和示例。在

相关问题 更多 >