您如何查看机械化正在使用的请求标头?

时间:2013-03-26 22:05:28

标签: python web-scraping mechanize

我正在尝试以编程方式向表单提交一些数据。我有一个小问题,服务器“不喜欢”我发送的内容。令人沮丧的是,没有任何错误信息或任何可以帮助诊断问题的信息,所有这一切都会让我回到我点击br.submit()时开始的同一页面。

当我在浏览器中手动点击提交按钮时,结果页面显示一个小的“成功!”信息。通过脚本提交时不会显示此类消息。此外,实际上没有更改发布到服务器。这很奇怪,我第一次遇到这种行为。

通过Mechanize文档,它表明在这些奇怪的,难以诊断的问题下,最好复制浏览器实际提交的请求标头。

我的问题是,当我致电br.submit()时,如何查看请求标题?

示例代码

location = 'http://ww.mysite.com'

br = mechanize.Browser()
cj = mechanize.LWPCookieJar()
br.set_cookiejar(cj)

username = MY_USER_NAME
password = MY_PASSWORD
br.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (username, password))))

br.open(location)

br.select_form(nr=0)
br['text'] = 'MY JUNK TO SUBMIT'    #Text field. Can put anything
br['DropDown1'] = ['4']             #This is a dropdown of integer values
br['DropDown2'] = ['3']             #Also a dropdown of ints
br.submit()

如何在提交表单时查看正在发送的标题?

1 个答案:

答案 0 :(得分:9)

您是否在询问如何查看浏览器或机械设备发送的标头?


<强>浏览器

与其他评论员一样,您可以使用Firebug(Firefox),开发者工具(IE 'F12',Chrome Developer tools和Opera {{}这样的插件检查浏览器发送的标头3}})等。


<强>机械化

使用机械化,您可以通过执行类似

的操作获得发送的标题的副本
import mechanize 

br = mechanize.Browser()
br.open("http://stackoverflow.com")
request = br.request
request.header_items()

在这种情况下给出了

[('Host', 'stackoverflow.com'), ('User-agent', 'Python-urllib/2.7')]

其他/一次性

一如既往地进行一次性调试或者如果没有提供任何内容,则可以使用Dragonfly来检查通过网络发送的标头。 提示:使用(http.request.uri == "http://stackoverflow.com/")

等过滤器