【发布时间】:2016-03-04 21:37:14
【问题描述】:
我正在尝试编写一个网络爬虫来自动化我在工作中必须做的一些事情。要在网站上使用 Web 应用程序,我需要使用基本身份验证登录(我知道该方案是基本的)。在网络浏览器中,我转到 URL,弹出一条错误消息,询问我提供的用户名和密码,然后我被允许进入第二个登录页面(以防万一)。
这是我在 Python 中使用 urllib2 所做的:
theurl = 'http://where-i-work.com/the-backend'
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0'
#nothing seems to work if the server knows I'm using Python
headers = { 'User-Agent' : user_agent,
'Authorization' : 'Basic myauthorizationstring12345'}
#I've seen this sent in my requests, but also double checked from encoding username and pw with base64
data = ''
req = urllib2.Request(theurl, data, headers)
handle = urllib2.urlopen(req)
当我尝试创建 handle 时,会产生 405 错误:不允许使用方法。我已经阅读了 99% 的时间,这意味着我尝试发送不应该发送的 POST 值。但是,当我使用 Tamper Data 时,我也看到了在请求中发送的这些信息。只是为了看看,我尝试在数据的标题中发送信息(url编码),但我收到了 401 错误,就像我从未发送过登录凭据一样。
再次,只是为了尝试,我还尝试了 https 而不是 http,这产生了“证书验证失败”错误,我理解这是一个单独的问题。基本上,我一直在尝试我能想到的。
我也尝试过使用urllib2.HTTPPasswordMgrWithDefaultRealm() 和urllib2.HTTPBasicAuthHandler() 等,但仍然出现405 错误。现在,我将继续使用我在那里发布的内容,因为我想在我仍在试图弄清楚这一点的同时看到正在发生的一切。
我只是不明白浏览器是如何正常发送凭据的吗?我在做不同的事情吗?
【问题讨论】:
标签: python web-scraping urllib2 basic-authentication http-status-code-405