【问题标题】:How do you view the request headers that mechanize is using?您如何查看 mechanize 正在使用的请求标头?
【发布时间】:2013-03-16 21:49:55
【问题描述】:

我正在尝试以编程方式将一些数据提交到表单。我有一个小问题,服务器“不喜欢”我发送的内容。令人沮丧的是,没有错误消息或任何可以帮助诊断问题的信息,它所做的只是让我回到我点击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()

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

【问题讨论】:

  • 如果你使用firefox可以安装名为live http headers的插件,发送请求前打开,发送请求后点击replay按钮查看headers。
  • @IonutHulub Righto。您可以在 Chrome 的网络选项卡中执行相同操作。但是,我好奇的不是浏览器发送的标头,我不确定如何获取mechanize 发送的标头。

标签: python web-scraping mechanize


【解决方案1】:

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


浏览器

正如其他评论员所说,您可以使用Firebug (Firefox)、开发工具(IE 'F12'、Chrome Developer tools 和 Opera Dragonfly)等插件检查浏览器发送的标头。


机械化

使用 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/") 之类的过滤器

【讨论】:

  • 我想知道机械化正在发送什么。虽然这在技术上是有效的(所以,我会标记它是正确的),但它有点绕道而行。 Mechanize API 中必须有一些东西可以让您看到它作为标头发送的内容。我就是找不到。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多