Python的Curl HTTP POST等效方法

22 投票
2 回答
26500 浏览
提问于 2025-04-16 01:16

我正在使用命令行通过curl向Hudson服务器发送请求,具体命令如下--

curl -X POST -d '<run><log encoding="hexBinary">4142430A</log><result>0</result><duration>2000</duration></run>' \
http://user:pass@myhost/hudson/job/_jobName_/postBuildResult

正如Hudson的文档中所示,我能不能用Python来实现同样的功能呢?我不想使用pyCurl或者通过os.system()来发送这个命令,有没有什么办法可以用纯Python来做到呢?

2 个回答

21

现在的解决方案要简单得多,可以使用requests模块(宣传语是:让人类也能轻松使用HTTP! :)

import requests

r = requests.post('http://httpbin.org/post', data = {'key':'value'}, auth=('user', 'passwd'))
r.text      # response as a string
r.content   # response as a byte string
            #     gzip and deflate transfer-encodings automatically decoded 
r.json()    # return python object from json! this is what you probably want!
22
import urllib2

req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
result = response.read()

这里的data指的是你想要发送的编码数据。

你可以使用urllib来编码一个字典,方法如下:

import urllib

values = { 'foo': 'bar' }
data = urllib.urlencode(values)

撰写回答