Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mechanize和Python不能正确处理cookie_Python_Mechanize_Session Cookies - Fatal编程技术网

Mechanize和Python不能正确处理cookie

Mechanize和Python不能正确处理cookie,python,mechanize,session-cookies,Python,Mechanize,Session Cookies,我有一个使用mechanize浏览器的Python脚本,它登录到一个自托管Wordpress博客,在自动重定向到仪表板后导航到另一个页面,以自动执行几个内置功能 这个脚本实际上在我的大多数博客上都能100%正常工作,但与其中一个博客形成了一个永久循环 不同的是,唯一一个失败的插件名为Wassup running。这个插件为所有访问者设置了一个会话cookie,我认为这就是导致问题的原因 当脚本转到新页面时,Wordpress代码没有得到正确的cookie设置,决定浏览器没有登录,并重定向到登录页

我有一个使用mechanize浏览器的Python脚本,它登录到一个自托管Wordpress博客,在自动重定向到仪表板后导航到另一个页面,以自动执行几个内置功能

这个脚本实际上在我的大多数博客上都能100%正常工作,但与其中一个博客形成了一个永久循环

不同的是,唯一一个失败的插件名为Wassup running。这个插件为所有访问者设置了一个会话cookie,我认为这就是导致问题的原因

当脚本转到新页面时,Wordpress代码没有得到正确的cookie设置,决定浏览器没有登录,并重定向到登录页面。脚本再次登录并尝试相同的函数,然后我们再次进行循环

我尝试使用Twill,Twill可以正确登录并正确处理cookies,但默认情况下,Twill会将所有内容输出到命令行。这不是我想要的行为,因为此时我正在进行页面操作,我需要访问原始html

这是设置代码

# Browser
self.br = mechanize.Browser()

# Cookie Jar 
policy = mechanize.DefaultCookiePolicy(rfc2965=True) 
cj = mechanize.LWPCookieJar(policy=policy) 
self.br.set_cookiejar(cj)
成功登录后,我调用此函数

def open(self):
    if 'http://' in str(self.burl):
        site = str(self.burl) + '/wp-admin/plugin-install.php' 
        self.burl = self.burl[7:]
    else:
        site = "http://" + str(self.burl) + '/wp-admin/plugin-install.php' 
    try:
        r = self.br.open(site, timeout=1000)
        html = r.read()
        return html
    except HTTPError, e:
        return str(e.code)
我想我需要将cookie保存到一个文件中,然后重新排列顺序,以便Wordpress会话cookie在Wassup之前返回


还有其他建议吗?

这是一个与看上去完全不同的问题,并且解决了,这就是为什么我决定将答案放在这里,供稍后阅读本文的人参考

设置WordPress站点时,url有一个默认为或的选项。这原来是cookie存储的一个问题。Cookie与url一起存储,作为其名称的一部分。我的程序使用这些格式中的一种或另一种对url进行半硬编码。这意味着每次我提出一个新的url请求时,它的格式都是错误的,并且找不到具有正确名称的cookie,因此WordPress站点正确地判定我没有登录,并将我重新发送到登录站点

修复方法是在登录后获取重定向中传递的url,并重新编码变量(在本例中为self.burl),以反映.httaccess文件期望看到的内容

这解决了我的问题,因为我的一些网站有一种格式,而另一些则有另一种格式


我希望这对使用请求、twill、mechanise等方面有所帮助。

看看
请求
库-这使得处理这些事情变得非常困难simpler@Jon克莱门茨。谢谢你的回答。在你昨晚的评论之后,我设法在请求库中度过了一段美好的时光,并发现它符合我的喜好。从命令行来看,我在登录时似乎工作得很好,如果需要的话,我想我也可以操纵cookies。这就是为什么Mechanize和Twill不再被使用的库吗?不能说真的-我认为Mechanize和Twill真的是为了其他东西,请求只是为了使事情比现有的urllib库更简单。就这样发生了很多事情重叠或者可以重叠。。。