首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python: urllib/urllib2/httplib混淆

Python: urllib/urllib2/httplib混淆
EN

Stack Overflow用户
提问于 2008-11-19 13:44:21
回答 8查看 30.9K关注 0票数 52

我正在尝试用Python编写登录序列脚本来测试web应用程序的功能,但我遇到了一些麻烦。

这是我需要做的:

做一个带有几个参数的POST,然后headers.

  • Follow a redirect

  • Retrieve
  1. HTML body。

现在,我是python的新手,但是到目前为止我测试过的两个东西都不起作用。首先,我使用了httplib、putrequest() (在URL中传递参数)和putheader()。这似乎没有遵循重定向。

然后我尝试了urllib和urllib2,将头和参数都作为dict传递。这似乎返回了登录页面,而不是我试图登录的页面,我猜这是因为缺少cookies或其他什么。

我错过了什么简单的东西吗?

谢谢。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-19 14:52:47

把重点放在urllib2上,它工作得很好。不要和httplib打交道,它不是顶级的API。

您需要注意的是,urllib2并不遵循重定向。

您需要合并一个将捕获并遵循重定向的HTTPRedirectHandler实例。

此外,您可能希望将默认HTTPRedirectHandler子类化以捕获信息,然后将其作为单元测试的一部分进行检查。

代码语言:javascript
复制
cookie_handler= urllib2.HTTPCookieProcessor( self.cookies )
redirect_handler= HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)

然后,您可以使用此opener对象进行POST和GET,正确处理重定向和cookies。

您可能还想添加自己的HTTPHandler子类来捕获和记录各种错误代码。

票数 31
EN

Stack Overflow用户

发布于 2011-01-29 17:33:42

这是我对这个问题的看法。

代码语言:javascript
复制
#!/usr/bin/env python

import urllib
import urllib2


class HttpBot:
    """an HttpBot represents one browser session, with cookies."""
    def __init__(self):
        cookie_handler= urllib2.HTTPCookieProcessor()
        redirect_handler= urllib2.HTTPRedirectHandler()
        self._opener = urllib2.build_opener(redirect_handler, cookie_handler)

    def GET(self, url):
        return self._opener.open(url).read()

    def POST(self, url, parameters):
        return self._opener.open(url, urllib.urlencode(parameters)).read()


if __name__ == "__main__":
    bot = HttpBot()
    ignored_html = bot.POST('https://example.com/authenticator', {'passwd':'foo'})
    print bot.GET('https://example.com/interesting/content')
    ignored_html = bot.POST('https://example.com/deauthenticator',{})
票数 15
EN

Stack Overflow用户

发布于 2008-11-19 15:17:32

@S.Lott谢谢你你的建议对我很有效,但做了一些修改。这就是我是如何做到的。

代码语言:javascript
复制
data = urllib.urlencode(params)
url = host+page
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)

cookies = CookieJar()
cookies.extract_cookies(response,request)

cookie_handler= urllib2.HTTPCookieProcessor( cookies )
redirect_handler= HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)

response = opener.open(request)
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/301924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档