我正试图用编程的方式把一些数据提交到表单中。我有一个小问题,服务器“不喜欢”我发送的内容。令人沮丧的是,没有错误消息,也没有任何可以帮助诊断问题的东西,它所做的只是将我吐回我点击br.submit()
时启动的同一页。
当我在浏览器中手动单击submit按钮时,结果页面显示一个小的“success!”信息。通过脚本提交时不会显示此类消息。此外,实际上没有将更改发布到服务器。很奇怪,我第一次遇到这种行为。
深入研究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()
当我提交表单时,如何查看正在发送哪些标题?
最佳答案
您是在问如何查看浏览器或mechanize发送的标题?
浏览器
就像其他评论员说的那样,你可以用一个插件检查浏览器发送的标题,比如Firebug(Firefox)、开发工具(IE'F12'、ChromeDeveloper tools和OperaDragonfly)等等。
机械化
使用mechanize,您可以通过执行以下操作来获取发送的头的副本
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')]
其他/一次性
对于一次性调试,或者如果没有提供任何内容,则可以使用Wireshark检查通过网络发送的头。提示:使用类似
(http.request.uri == "http://stackoverflow.com/")
的过滤器