我正在尝试用Python编写登录序列脚本来测试web应用程序的功能,但我遇到了一些麻烦。
这是我需要做的:
做一个带有几个参数的POST,然后headers.
现在,我是python的新手,但是到目前为止我测试过的两个东西都不起作用。首先,我使用了httplib、putrequest() (在URL中传递参数)和putheader()。这似乎没有遵循重定向。
然后我尝试了urllib和urllib2,将头和参数都作为dict传递。这似乎返回了登录页面,而不是我试图登录的页面,我猜这是因为缺少cookies或其他什么。
我错过了什么简单的东西吗?
谢谢。
发布于 2008-11-19 14:52:47
把重点放在urllib2
上,它工作得很好。不要和httplib
打交道,它不是顶级的API。
您需要注意的是,urllib2
并不遵循重定向。
您需要合并一个将捕获并遵循重定向的HTTPRedirectHandler
实例。
此外,您可能希望将默认HTTPRedirectHandler
子类化以捕获信息,然后将其作为单元测试的一部分进行检查。
cookie_handler= urllib2.HTTPCookieProcessor( self.cookies )
redirect_handler= HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)
然后,您可以使用此opener
对象进行POST和GET,正确处理重定向和cookies。
您可能还想添加自己的HTTPHandler
子类来捕获和记录各种错误代码。
发布于 2011-01-29 17:33:42
这是我对这个问题的看法。
#!/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',{})
发布于 2008-11-19 15:17:32
@S.Lott谢谢你你的建议对我很有效,但做了一些修改。这就是我是如何做到的。
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)
https://stackoverflow.com/questions/301924
复制相似问题