如何使用cURL的"GET"请求与基于Python的REST API进行网络编程?

4 投票
2 回答
5985 浏览
提问于 2025-04-18 09:17

让我先说一下,我对 cURLPythonREST 这些东西还是个新手。

我想做的事情是:

我有一个虚拟网络,里面有一个SDN控制器(叫Contrail)。Contrail提供了一个基于Python的REST API,可以用来进行网络自动化的开发和管理。

为了访问这个REST API,我暂时通过Firefox的一个扩展工具“RESTClient”来使用cURL脚本,这样可以确保这些cURL调用在Python之外也能正常工作。

这些cURL脚本的目的是查询虚拟网络(VNs),并打印出它们的信息,这样我就可以输入我需要删除的特定虚拟网络的ID,进行维护。

以下是我目前正在使用的cURL脚本:

请求:

curl -X GET -H "Content-Type: application/json; charset=UTF-8" http://10.xx.xx.xx:1234/virtual-networks

响应(没有具体值):

{"virtual-networks": [{"href": , "fq_name": , ["default-domain", "vn-blue"], "uuid"}

.

总的来说,我希望能在Python中运行上面的cURL脚本。我已经安装了Python 2.7、urllib2、libcurl和pycurl,但就是搞不清楚正确的语法是什么。

2 个回答

2

基本上,你想要用 urllib2 来发送一个特别的HTTP请求,或者有些人认为用第三方的 requests 模块会更好。HTTP请求其实并不复杂,你可以先了解一下HTTP请求的基本知识(可以从 维基百科 开始,或者看看最近发布的 RFC 723*)。在你的curl命令中,你设置了一些头部参数(使用 -H 选项)。你可以很容易地用requests模块的 custom headers 功能来实现这些,具体的文档可以在这里找到:http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers

4

如果你能安装requests这个库,你就可以使用:

response = requests.get('http://10.xx.xx.xx:1234/virtual-networks')
response.json

你可以通过下面的方式来设置请求的头信息:

headers = {'content-type': 'application/json'}
response = requests.get('http://10.xx.xx.xx:1234/virtual-networks', headers=headers)

不过,只有在发送POST、PUT、PATCH请求的时候,才需要定义Content-type,而在GET请求中则要使用Accept

撰写回答