需要帮助从curl迁移到pycurl

1 投票
1 回答
2719 浏览
提问于 2025-04-16 09:11

我正在尝试弄清楚如何用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

撰写回答