Python中的CURL替代方案
我在PHP中有一个用cURL的调用:
curl -i -H 'Accept: application/xml' -u login:key "https://app.streamsend.com/emails"
我想在Python中做同样的事情。Python里有没有类似cURL的东西?我知道有urllib,但我不知道怎么用。
7 个回答
36
这里有一个简单的例子,使用urllib2来进行基本的身份验证,连接GitHub的API。
import urllib2
u='username'
p='userpass'
url='https://api.github.com/users/username'
# simple wrapper function to encode the username & pass
def encodeUserData(user, password):
return "Basic " + (user + ":" + password).encode("base64").rstrip()
# create the request object and set some headers
req = urllib2.Request(url)
req.add_header('Accept', 'application/json')
req.add_header("Content-type", "application/x-www-form-urlencoded")
req.add_header('Authorization', encodeUserData(u, p))
# make the request and print the results
res = urllib2.urlopen(req)
print res.read()
另外,如果你把这个放在一个脚本里,然后从终端运行,你可以把返回的字符串传给'mjson.tool',这样就能让输出看起来更漂亮。
>> basicAuth.py | python -mjson.tool
最后要注意的是,urllib2只支持GET和POST请求。
如果你需要使用其他的HTTP请求方式,比如DELETE、PUT等,你可能需要看看PYCURL。
136
你可以使用Requests这个库。安装的方法是
pip install requests
你可以在这里找到它的使用说明:https://requests.readthedocs.io/en/latest/
68
import urllib2
manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
manager.add_password(None, 'https://app.streamsend.com/emails', 'login', 'key')
handler = urllib2.HTTPBasicAuthHandler(manager)
director = urllib2.OpenerDirector()
director.add_handler(handler)
req = urllib2.Request('https://app.streamsend.com/emails', headers = {'Accept' : 'application/xml'})
result = director.open(req)
# result.read() will contain the data
# result.info() will contain the HTTP headers
# To get say the content-length header
length = result.info()['Content-Length']
你可以试试用urllib2来替代你的cURL调用。这个方法还没有经过测试。