使用chris atlee的pythonposter library有没有方法包括cookie处理?
我有python http登录代码,可用于cookies:

cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
request = urllib2.Request(login_url, params)
result = urlOpener.open(request)

但是当我需要上传一个文件时,我不知道如何同时使用poster lib代码和cookie处理代码。Poster lib似乎需要调用urllib2.urlopen(),而不是像上面的代码那样调用一些自定义的URL打开器。
例如,我不知道如何将cookies与下面的python文件post代码一起使用:
register_openers()
params = {'file': open("test.txt", "rb"), 'name': 'upload test'}
datagen, headers = multipart_encode(params)
request = urllib2.Request(upload_url, datagen, headers)
result = urllib2.urlopen(request)

最佳答案

我给chris atlee发了一封电子邮件,询问我们是否可以得到一个基本的身份验证示例。他很冷静地回答我的问题,甚至运行了一些我发给他的示例代码。
要包括cookie处理,请执行以下操作:

opener = poster.streaminghttp.register_openers()
opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) # Add cookie handler
params = {'file': open("test.txt", "rb"), 'name': 'upload test'}
datagen, headers = poster.encode.multipart_encode(params)
request = urllib2.Request(upload_url, datagen, headers)
result = urllib2.urlopen(request)

要向请求添加基本身份验证,只需执行以下操作(为了完整起见,我添加了base64编码行):
opener = poster.streaminghttp.register_openers()
params = {'file': open("test.txt", "rb"), 'name': 'upload test'}
datagen, headers = poster.encode.multipart_encode(params)
request = urllib2.Request(upload_url, datagen, headers)
auth = base64.encodestring('%s:%s' % ('username', 'password'))[:-1] # This is just standard un/pw encoding
request.add_header('Authorization', 'Basic %s' % auth ) # Add Auth header to request
result = urllib2.urlopen(request)

希望这有帮助。另一个非常感谢克里斯·阿特利。

关于python - 如何使用python poster lib通过带有cookie的HTTP通过HTTP发布文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1690446/

10-12 04:08