Вопрос: Как вы показываете данные POST с помощью cURL?


Например, POST для веб-сервера с аргументом -v:

curl -v http://testserver.com/post -d "firstname=john&lastname=doe"

И выход

> POST /post HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
> Host: testserver.com
> Accept: */*
> Content-Length: 28
> Content-Type: application/x-www-form-urlencoded
> 
< HTTP/1.1 200 OK
(etc)

Нет никаких упоминаний о данных, которые я опубликовал.

Есть ли опция в cURL для отображения строки «firstname = john & lastname = doe» в выводе?

Примечание. Очевидно, что строка, которую я хочу, находится в команде, которую я выполнил, но есть несколько других параметров сообщения, таких как --form и --data-ascii и т. Д. Я бы хотел, чтобы необработанные данные отправлялись на сервер.


110
2018-06-01 09:10


Источник


Вы также можете запустить tcpdump для сбора фактических данных, отправляемых на сервер. Или wirehark (лучше), если у вас есть это. - Keith
Я не уверен, что ты сможешь. Является ли это примером безопасности от неясности? - stackoverflow.com/questions/198462/... - slotishtype


Ответы:


Ближайший я получил без использования tcpdump использует --trace-ascii опция:

~ curl http://w3.org/ -d "hello=there" --trace-ascii /dev/stdout
== Info: About to connect() to w3.org port 80 (#0)
== Info:   Trying 128.30.52.45... == Info: connected
== Info: Connected to w3.org (128.30.52.45) port 80 (#0)
=> Send header, 210 bytes (0xd2)
0000: POST / HTTP/1.1
0011: User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Host: w3.org
007e: Accept: */*
008b: Content-Length: 11
009f: Content-Type: application/x-www-form-urlencoded
00d0: 
=> Send data, 11 bytes (0xb)
0000: hello=there

К сожалению, это не работает, когда вы публикуете multipart/form-data:

~ curl http://w3.org/ -F hello=there -F testing=123 --trace-ascii /dev/stdout
== Info: About to connect() to w3.org port 80 (#0)
== Info:   Trying 128.30.52.45... == Info: connected
== Info: Connected to w3.org (128.30.52.45) port 80 (#0)
=> Send header, 270 bytes (0x10e)
0000: POST / HTTP/1.1
0011: User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Host: w3.org
007e: Accept: */*
008b: Content-Length: 244
00a0: Expect: 100-continue
00b6: Content-Type: multipart/form-data; boundary=--------------------
00f6: --------19319e4d1b79
010c: 
<= Recv header, 32 bytes (0x20)
0000: HTTP/1.1 301 Moved Permanently

137
2018-06-01 10:50



Я знаю, что это ваш собственный ответ, но я думаю, вы можете принять это как правильный ответ. Он решил это для меня в любом случае, спасибо :-) - Darren Cook
Удалите все -v или --verbose поскольку они переопределяют директиву трассировки. - AlikElzin-kilaka
@AugustinRiedinger Он отлично работает с https. Я просто попробовал и увидел полезную нагрузку. Данные шифруются, но поскольку вы являетесь конечной точкой соединения, у вас есть все данные, доступные вам, и поэтому завиток может видеть это. - Gerald Kaszuba
С помощью --trace-ascii работал на меня на OS X 10.8.5 Mountain Lion. Я загрузил объект множественной формы с двумя изображениями и куском json, и все работало, как ожидалось - Heath Borders
Вместо --trace-ascii /dev/stdout ты можешь --trace-ascii - (Тир) - Adam Michalik


Или вы можете проверить https://httpbin.org/

$ curl https://httpbin.org/post -d "firstname=john&lastname=doe"
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "firstname": "john", 
    "lastname": "doe"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "27", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.43.0"
  }, 
  "json": null, 
  "origin": "78.228.163.126", 
  "url": "https://httpbin.org/post"
}

16
2017-09-30 09:21





Вы можете использовать Чарльз а также curl --proxy localhost:8888, Simples!


7
2017-08-28 13:51



Нет, он не работает с https. Принятый ответ прекрасен и проще. - akostadinov
https не требовалось в вопросе: p - Dori
@CasparHarmer, какова ваша проблема с принятым ответом? если вам нужно больше, TCPdump делает сделку. - Gewure
Это произошло 3 года назад. Не могу вспомнить. - Caspar Harmer


Хотелось бы добавить альтернативу netcat

#!/bin/bash
nc -l 8080 &

curl "http://localhost:8080" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data @<(cat <<EOF
{
  "me": "$USER",
  "something": $(date +%s)
}
EOF
)

7
2018-05-21 13:04