Есть ли способ передать содержимое файла в curl?

Я хотел бы выполнить довольно сложный HTTP-запрос с множественными / смешанными границами из командной строки.

POST /batch HTTP/1.1
Host: www.googleapis.com
Content-length: 592
Content-type: multipart/mixed; boundary=batch_0123456789
Authorization: Bearer authorization_token

--batch_0123456789
Content-Type: application/http
Content-ID: <item1:user@example.com>
Content-Transfer-Encoding: binary


POST /drive/v2/files/fileId/permissions
Content-Type: application/json
Content-Length: 71


{
  "role": "reader",
  "type": "user",
  "value": "user@example.com"
} 


--batch_0123456789
Content-Type: application/http
Content-ID: <item2:user@example.com>
Content-Transfer-Encoding: binary


POST /drive/v2/files/fileId/permissions
Content-Type: application/json
Content-Length: 71


{
  "role": "reader",
  "type": "user",
  "value": "user@example.com"
}


--batch_0123456789--

В идеале я хотел бы поместить этот запрос в файл, а затем просто вызвать curl для выполнения этого HTTP-запроса.

curl myrequest.txt

Есть ли простой прямой способ сделать это? Я понимаю, что есть клиентские библиотеки, которые имеют свои идиоматические способы обработки этого, но мне интересно узнать, есть ли способ сделать это из командной строки.

1 ответ

Решение

Вы можете использовать --config опция (см. раздел "CONFIG FILE" в руководстве для более подробной информации):

curl --config myrequest.txt

Я не думаю, что есть простой способ встроить многострочное тело POST в файл конфигурации. Вы можете заменить каждый символ новой строки \r\n (Новые строки CRLF требуются для составных запросов):

url = "http://www.googleapis.com/batch"
header = "Content-length: 592"
header = "Content-type: multipart/mixed; boundary=batch_0123456789"
header = "Authorization: Bearer authorization_token"
data-binary = "--batch_0123456789\r\nContent-Type: application/http\r\nContent-ID: <item1:user@example.com>\r\nContent-Transfer-Encoding: binary\r\n\r\n..."

но это не очень легко читать.

В качестве альтернативы, вы можете поместить тело POST в отдельный файл. Например:

myrequest.txt

url = "http://www.googleapis.com/batch"
header = "Content-length: 592"
header = "Content-type: multipart/mixed; boundary=batch_0123456789"
header = "Authorization: Bearer authorization_token"
data-binary = "@myrequestbody.txt"

myrequestbody.txt

--batch_0123456789
Content-Type: application/http
Content-ID: <item1:user@example.com>
Content-Transfer-Encoding: binary


POST /drive/v2/files/fileId/permissions
Content-Type: application/json
Content-Length: 71

...
Другие вопросы по тегам