gpt4 book ai didi

python - 无需首先获得 401 错误即可为 Python 和授权进行 Mechanize

转载 作者:可可西里 更新时间:2023-11-01 16:19:08 25 4
gpt4 key购买 nike

我正在尝试使用 Mechanize 自动与一个非常挑剔的遗留系统进行交互。特别是,在第一个登录页面之后,必须将授权与每个请求一起发送,这会使您退出系统。不幸的是,Mechanize 似乎满足于在第一次收到 401 Unauthorized 错误后才发送授权。有什么办法让它每次都发送授权?

下面是一些示例代码:

br.add_password("http://example.com/securepage", "USERNAME", "PASSWORD", "/MYREALM")
br.follow_link(link_to_secure_page) # where the url is the previous URL

这是我在调试 Mechanize 时得到的响应:

send: 'GET /securepage HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: example.com\r\nReferer: http://example.com/home\r\nConnection: close\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'
reply: 'HTTP/1.1 401 Unauthorized\r\n'
header: Server: Tandy1000Web
header: Date: Thu, 08 Dec 2011 03:08:04 GMT
header: Connection: close
header: Expires: Tue, 01 Jan 1980 06:00:00 GMT
header: Content-Type: text/html; charset=US-ASCII
header: Content-Length: 210
header: WWW-Authenticate: Basic realm="/MYREALM"
header: Cache-control: no-cache
send: 'GET /securepage HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: example.com\r\nReferer: http://example.com/home\r\nConnection: close\r\nAuthorization: Basic VVNFUk5BTUU6UEFTU1dPUkQ=\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Server: Tandy1000Web
header: Date: Thu, 08 Dec 2011 03:08:07 GMT
header: Connection: close
header: Last-Modified: Thu, 08 Dec 2011 03:08:06 GMT
header: Expires: Tue, 01 Jan 1980 06:00:00 GMT
header: Content-Type: text/html; charset=UTF-8
header: Content-Length: 33333
header: Cache-control: no-cache

问题是,与在现代 Web 应用程序中使用 GET 请求应该发生的情况相反,通过首先点击 401 错误,我得到了错误的页面。我已经用 CURL 和 urllib2 确认,如果我通过在第一个请求中传入 auth header 直接点击 URL,我会得到正确的页面。

关于如何告诉 mechanize 始终发送身份验证 header 并避免第一个 401 错误的任何提示?这需要在客户端修复。我无法修改服务器。

最佳答案

from base64 import b64encode
import mechanize

url = 'http://192.168.3.5/table.js'
username = 'admin'
password = 'password'

# I have had to add a carriage return ('%s:%s\n'), but
# you may not have to.
b64login = b64encode('%s:%s' % (username, password))

br = mechanize.Browser()

# # I needed to change to Mozilla for mine, but most do not
# br.addheaders= [('User-agent', 'Mozilla/5.0')]

br.addheaders.append(
('Authorization', 'Basic %s' % b64login )
)

br.open(url)
r = br.response()
data = r.read()

print data

关于python - 无需首先获得 401 错误即可为 Python 和授权进行 Mechanize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com