Python中的CURL替代

2024-03-29 05:51:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在PHP中使用了一个cURL调用:

curl -i -H 'Accept: application/xml' -u login:key "https://app.streamsend.com/emails"

我需要一种方法在Python中做同样的事情。Python中有没有卷曲的替代品。我知道urllib,但我是一个Python新手,不知道如何使用它。


Tags: 方法keyhttpscomappapplicationloginxml
3条回答
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']

您的cURL调用改用urllib2。完全未经测试。

下面是一个使用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

您可以使用Requests: HTTP for Humans用户指南中描述的HTTP请求。

相关问题 更多 >