如何使用cURL的"GET"请求与基于Python的REST API进行网络编程?
让我先说一下,我对 cURL
、Python
和 REST
这些东西还是个新手。
我想做的事情是:
我有一个虚拟网络,里面有一个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 个回答
基本上,你想要用 urllib2
来发送一个特别的HTTP请求,或者有些人认为用第三方的 requests 模块会更好。HTTP请求其实并不复杂,你可以先了解一下HTTP请求的基本知识(可以从 维基百科 开始,或者看看最近发布的 RFC 723*)。在你的curl命令中,你设置了一些头部参数(使用 -H
选项)。你可以很容易地用requests模块的 custom headers
功能来实现这些,具体的文档可以在这里找到:http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers。
如果你能安装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
。