在Python中用基本认证做HTTP POST的最佳方式是什么?
在Python中,使用基本认证进行HTTP POST请求的最简单方法是什么?
只使用Python的核心库。
3 个回答
6
如果你定义了一个网址、用户名、密码,还有一些要发送的数据,这在Python2中应该可以正常工作...
import urllib2
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
content = urllib2.urlopen(url, post_data)
这是官方Python文档中的一个例子,展示了如何在urllib2中使用基本认证: * http://docs.python.org/release/2.6/howto/urllib2.html
关于使用urllib2进行基本认证的完整教程: * http://www.voidspace.org.uk/python/articles/authentication.shtml
150
说真的,直接用requests
就行:
import requests
resp = requests.post(url, data={}, auth=('user', 'pass'))
这是一个纯Python的库,安装起来非常简单,只需要运行easy_install requests
或者pip install requests
就可以了。它的接口非常简单易用,而且修复了urllib2
中的一些错误,这样你就不用自己去解决这些问题了。别因为一些无谓的自我要求让自己的生活变得更复杂。
11
一种变通的方法可以解决问题:
urllib.urlopen("https://username:password@hostname/path", data)
很多人不知道,在URL中指定用户名和密码的旧写法在urllib.urlopen
中是可以用的。用户名和密码似乎不需要特别的编码,除了如果密码里有一个“@”符号的情况。