cURL을 사용하여 POST 데이터를 어떻게 표시합니까?


139

예를 들어, -v 인수를 사용하여 웹 서버에 POST :

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 등과 같은 몇 가지 다른 게시 옵션이 있습니다. 원시 데이터가 서버로 전송되는 것을보고 싶습니다.


1
tcpdump를 실행하여 서버로 전송되는 실제 데이터를 캡처 할 수도 있습니다. 또는 wireshark (더 나은)가 있다면.
Keith

당신이 할 수 있는지 잘 모르겠습니다. 이것이 모호한 보안의 예입니까? - stackoverflow.com/questions/198462/...
slotishtype

답변:


175

내가 사용하지 않은 가장 가까운 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

4
나는 그것이 당신의 대답이라는 것을 알고 있지만, 당신이 이것을 정답으로 받아 들일 수 있다고 생각합니다. 그것은 :-), 어쨌든 나를 위해 감사를 해결
대런 쿡에게

4
추적 지시문을 무시 -v하거나 또는 --verbose그대로 두십시오 .
AlikElzin-kilaka

2
@AugustinRiedinger https와 잘 작동합니다. 나는 그것을 시도하고 페이로드를 보았다. 데이터는 암호화되지만 연결의 끝점이므로 모든 데이터를 사용할 수 있으므로 curl에서 볼 수 있습니다.
gak

2
사용 --trace-asciiOS X 10.8.5 마운틴 라이온에 날 위해 일했습니다. 나는 두 개의 이미지와 json body를 가진 multipart form entity를 업로드했고 모든 것이 예상대로 작동했다
Heath Borders

4
대신 --trace-ascii /dev/stdout할 수 있습니다 --trace-ascii -(대시)
아담 미칼

27

또는 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"
}

12

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
)

9

당신은 사용할 수 찰스curl --proxy localhost:8888. 단순!


4
아니요, https에서는 작동하지 않습니다. 허용되는 대답은 정확하고 쉽습니다.
akostadinov

https의문의 요구 사항은 아니었다 : p
Dori

@CasparHarmer 당신의 답은 무엇입니까? 더 많은 것이 필요하면 TCPdump가 처리합니다.
Gewure

이것은 3 년 전에 일어났습니다. 기억이 안나.
Caspar Harmer 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.