举例来说,使用 -v 参数向 Web 服务器发送 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
是使用以下--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
答案2
或者你可以测试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": "*.*.*.*",
"url": "https://httpbin.org/post"
}
答案3
想要添加 netcat 替代品
#!/bin/bash
nc -l 8080 &
curl "http://localhost:8080" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data @- <<EOF
{
"me": "$USER",
"something": $(date +%s)
}
EOF
答案4
你可以使用查尔斯和curl --proxy localhost:8888
. 简单!