нужна помощь с переездом с локона на пикурл - PullRequest
1 голос
/ 30 декабря 2010

Я пытаюсь выяснить, как отправить pycurl "POST" в интерфейс REST (в данном случае, 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)

что мне делать с данными для передачи?

edit: под данными я подразумеваю переменную под названием data. Как отправить данные (что включено в опцию -d) через pycurl. Я попытался сделать это, но получил ошибку (очевидно, из-за ее типа). Я пробовал urllib.quote_plus (), но это вызвало ошибку 400 в службе REST. Я подозреваю, что это проблема, так как мои GET работают нормально.

1 Ответ

3 голосов
/ 30 декабря 2010

Добавление этих операторов может помочь:

c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)

Дополнительные сведения см. В разделе «HTTP POSTing» учебника libcurl .

Примечание 1: Еслиdata строка должна быть заключена в двойные кавычки, тогда вы должны сделать: c.setopt(pycurl.POSTFIELDS, '"%s"' % data).

Примечание 2: Я думаю, что вы сделали опечатку: переменная conn должна называться c.

...