4

我正在为下面的 curl 命令寻找 Python 等效项。

curl http://localhost/x/y/update -H 'Content-type: text/xml; charset=utf-8' --data-binary @filename.xml

顺便说一句,我通常使用下面的代码将数据作为字符串发布。

curl http://localhost/x/y/update --data '<data>the data is here</data>' -H 'Content-type:text/xml; charset=utf-8'

baseurl = http://localhost/x/y
thedata = '<data>the data is here</data>'

headers = {"Content-type": "text/xml", "charset": "utf-8"}
thequery = urlparse.urljoin(baseurl, thedata, querycontext)
therequest = urllib2.Request(thequery, headers)
theresponse = urllib2.urlopen(therequest)
4

4 回答 4

5

Python要求它为这类东西提供一个很棒的库。你所拥有的可以通过以下方式简单地完成:

import requests

headers = {'content-type': 'text/xml; charset=utf-8'}
response = requests.post(url, data="<data>the data is here</data>", headers=headers)
with open("filename.xml", "w") as fd:
    fd.write(response.text)

pycurl 和其他一些用于 python 的 url 和 http 客户端库的问题在于,它需要比实现相对简单的东西所需的更多的努力。要求它对用户更友好,我认为这是您在这个问题上所寻找的。

希望这可以帮助

于 2012-12-20T11:23:18.243 回答
2

问题是关于上传文件,而接受的答案只是保存到文件

下面是正确的代码:

import requests

 # Here you set the file you want to upload and it's content type 
files = {'upload_file': ('filename.xml', open('filename.xml','rb'), 'text/xml' }

headers = {} # Do not set content type here, let the library do its job

response = requests.post(url, 
              data="<data>the data is here</data>", 
              files=files,
              headers=headers)
fd = open("output-response.txt", "w")
fd.write(response.text)
fd.close()

上面的代码将从中读取一个文件filename.xml并通过 POST 上传它,然后它还将存储到 收到output-response.txt响应中。

于 2019-04-03T15:30:41.373 回答
0

查看名为pycurl的 curl 的 python 包装器

它真的被广泛使用,所以有很多关于如何在互联网上使用图书馆的例子。

如果您刚刚开始,那么可能值得看看愤怒的对象网站

于 2012-12-20T11:15:51.860 回答
0

使用名为 Requests 的漂亮 python 模块它可以完成 90% 的 curl 选项,而且它也可以在 Windows 上不编译也能工作。

https://github.com/kennethreitz/requests

与 curl、urrlib、urrlib2 或 httplib、httplib2 相比,它非常容易...... :)

于 2012-12-20T11:22:26.963 回答