需要帮助从curl迁移到pycurl
我正在尝试弄清楚如何用pycurl向一个REST接口发送“POST”请求(在这个例子中是Neo4j)。
我可以通过CURL做到这一点,代码是:
curl -HContent-Type:application/json -X POST -d '"http://localhost:7474/db/data/node/123"' http://localhost:7474/db/data/index/node/persons/name/peter
...但是我不知道如何用CURL的选项来实现这个功能。这是我目前最接近的结果,但它失败了。
data = "http://localhost:7474/db/data/node/123"
headers = {"Content-Type": "application/json"}
url_dir = "http://localhost:7474/db/data/index/node/persons/name/peter"
conn = pycurl.Curl()
c.setopt(pycurl.URL, url_dir)
c.setopt(pycurl.HTTPHEADER, headers)
我该如何处理要传输的数据呢?
补充说明:我说的数据是指名为data的变量。我该如何通过pycurl发送这些数据(也就是在-d选项中包含的内容)呢?我尝试过对它进行url编码,但出现了错误(显然是因为它的类型)。我还尝试过使用urllib.quote_plus(),但这导致REST服务返回了400错误。我怀疑这就是问题所在,因为我的GET请求工作得很好。
1 个回答
3
添加这些语句可能会有帮助:
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)
想了解更多信息,可以查看libcurl教程中的“HTTP POSTing”部分。
注意1:如果data
字符串需要用双引号包起来,那么你应该这样写:c.setopt(pycurl.POSTFIELDS, '"%s"' % data)
。
注意2:我觉得你可能打错字了:conn
这个变量应该叫c
。