Как создать функцию в Python, эквивалентную этому вызову curl? - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема с кодом ниже:

!curl -X POST \
      -H 'Content-Type':'application/json' \
      -d '{"data":[[4]]}' \
      http://0.0.0.0/score

Как я могу преобразовать этот код в функцию Python или с помощью Почтальона?

Ответы [ 2 ]

1 голос
/ 26 июня 2019
import requests

payload = {
    "data": [[4]]
}

headers = {
    'Content-Type': "application/json",
}

server_url = 'http://0.0.0.0/score'

requests.post(server_url, json = payload, headers = headers)

должно быть примерно эквивалентно вашей команде curl.

В противном случае, чтобы "перевести" curl в команды Python, вы можете использовать такие инструменты, как https://curl.trillworks.com/#python.

Почтальон имеет удобный инструмент "import" для импорта curl команд, подобных вашей (вставка вашей команды в виде необработанного текста).
Результатом также может быть "экспорт" в код Python с использованием Postman.

0 голосов
/ 27 июня 2019

Кратчайший эквивалент (с requests lib) будет выглядеть так:

import requests  # pip install requests
r = requests.post("http://0.0.0.0/score", json={"data":[[4]]})

requests автоматически установит соответствующий заголовок Content-Type для этого запроса.


Обратите внимание, что все еще будут некоторые различия в заголовках запросов, потому что curl и requests всегда устанавливают свой собственный набор заголовков неявно.

Ваша команда curl отправит этот набор заголовков:

"Accept": "*/*",
"Content-Length": "8",  # not the actual content length
"Content-Type": "application/json",
"Host": "httpbin.org",  # for testing purposes
"User-Agent": "curl/7.47.0"

И requests заголовки будут выглядеть так:

"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"Content-Length": "8",
"Accept": "*/*",
"Content-Type": "application/json"

Таким образом, вы можете вручную указать User-Agent заголовок в headers= аргументе ключевого слова, если необходимо.
Но сжатие все равно будет использоваться.

...