我正在使用 mechanize 从不同的代理访问同一网站。该网站有一个登录页面。我有 5 个代理和 5 个不同的登录名,每个代理使用一个登录名。
如果我只使用一个代理和一个登录运行我的脚本,则每个脚本都可以正常工作。但是,如果我同时运行两个或多个代理/登录,那么我就会开始收到错误(来自网站),例如“您的 session 已超时或未启用 cookie”。无论我是从同一脚本(同一进程)还是从不同脚本(不同进程)运行 5 个实例,都会发生这种情况。
什么会导致它单独工作但不能同时工作?
最佳答案
这是因为 mechanize 默认情况下会自动创建一个共享的“cookie jar”。对于更高级的 cookie 处理选项,您必须为每个脚本 session 创建自己的 cookie jar。
我必须在过去的项目中使用自定义 cookie jar,以便将 cookie 从一个 session 移动到另一个 session 。最终结果是相同的,脚本的每个实例都有自己唯一的文件来存储其 cookie,因此您需要管理 cookie 文件并确保它们不会混淆。
>>>> import mechanize
>>>> cj1 = mechanize.CookieJar()
>>>> cj2 = mechanize.CookieJar()
>>>> mech1 = mechanize.OpenerFactory().build_opener(mechanize.HTTPCookieProcessor(cj1))
>>>> mech2 = mechanize.OpenerFactory().build_opener(mechanize.HTTPCookieProcessor(cj2))
>>>> request = mechanize.Request('http://example.com') # testing shows they can share a request
>>>> response1 = mech1.open(request)
>>>> response2 = mech2.open(request)
>>>> print cj1
<mechanize._clientcookie.CookieJar[<Cookie JSESSIONID=54FBB2BE99E4CFDA8F8386F52FCF59C3>]>
>>>> print cj2
<mechanize._clientcookie.CookieJar[<Cookie JSESSIONID=350C0D544CDAD344A1272DA8D7B016B0>]>
在我测试的这个示例中,您可以看到两个 mechanize 对象,每个对象都有自己独立的 cookie jar。
关于python - mechanize: cookies 混淆了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268405/