在服务器curl验证请求,在向服务器发送请求时,如何查看curl发出的请求标头?...

回答(13)

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

curl -s -v -o/dev/null -H "Testheader: test" http://www.example.com

如果要发送HEAD请求而不是GET请求,也可以使用 -I 选项 .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

我认为 curl -v 是最简单的 . 它将吐出请求 Headers (前缀为'>'的行),而不必写入文件:

$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/

* About to connect() to stackoverflow.com port 80 (#0)

* Trying 69.59.196.211... connected

* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)

> HEAD / HTTP/1.1

> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS

> Host: stackoverflow.com

> Accept: */*

> Testing: Test header so you see this works

>

< HTTP/1.0 200 OK

...

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

curl --trace-ascii或使用单个破折号而不是文件名将其发送到stdout:

curl --trace-ascii - {URL}

这会向您显示curl发送和接收的所有内容,并提供一些额外的信息 .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

这是我在php中的http客户端,用于包含cookie的帖子查询:

function http_login_client($url, $params = "", $cookies_send = "" ){

// Vars

$cookies = array();

$headers = getallheaders();

// Perform a http post request to $ur1 using $params

$ch = curl_init($url);

$options = array( CURLOPT_POST => 1,

CURLINFO_HEADER_OUT => true,

CURLOPT_POSTFIELDS => $params,

CURLOPT_RETURNTRANSFER => 1,

CURLOPT_HEADER => 1,

CURLOPT_COOKIE => $cookies_send,

CURLOPT_USERAGENT => $headers['User-Agent']

);

curl_setopt_array($ch, $options);

$response = curl_exec($ch);

/// DEBUG info echo $ response; var_dump(curl_getinfo($ ch)); ///

// Parse response and read cookies

preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);

// Build an array with cookies

foreach( $matches[1] as $index => $cookie )

$cookies[$cookie] = $matches[2][$index];

return $cookies;

} // end http_login_client

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

curl的 --trace-ascii 选项将显示请求标头,以及响应标头和响应正文 .

例如,命令

curl --trace-ascii curl.trace http://www.google.com/

生成一个文件 curl.trace ,其开头如下:

== Info: About to connect() to www.google.com port 80 (#0)

== Info: Trying 209.85.229.104... == Info: connected

== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)

=> Send header, 145 bytes (0x91)

0000: GET / HTTP/1.1

0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3

0050: OpenSSL/0.9.7l zlib/1.2.3

006c: Host: www.google.com

0082: Accept: */*

008f:

它还得到了一个响应(一个302响应,确切但无关紧要) .

如果您只想保存响应标头,请使用 --dump-header 选项:

curl -D file url

curl --dump-header file url

如果您需要有关可用选项的更多信息,请使用 curl --help | less (它会产生几百行输出,但会提到很多选项) . 或者找到manual page,其中有更多解释选项的含义 .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

我知道这有点晚了,但我最喜欢这样做的方法是 netcat ,因为你得到了 curl 发送的内容;这可能与 --trace 或 --trace-ascii 选项不同,后者不能正确显示非ASCII字符(它们只显示为点或需要解码) .

您可以通过打开第一个类型的两个终端窗口来轻松完成此操作:

nc -l localhost 12345

这将在本地计算机的端口12345上打开侦听进程 .

在第二个终端窗口中输入curl命令,例如:

curl --form 'foo=bar' localhost:12345

在第一个终端窗口中,您将看到 exactly 请求中发送的卷曲 .

当然 nc 当然不会发送任何响应(除非你自己输入),所以你需要中断curl命令(control-c)并重复每个测试的过程 .

但是,这对于简单地调试您的请求是一个有用的选项,因为您不会在任何地方进行往返,或者在某个地方产生虚假的迭代请求,直到您做到正确为止;一旦你对命令感到满意,只需将其重定向到一个有效的URL,你就可以了 .

您也可以对任何cURL库执行相同操作,只需编辑您的请求以指向本地 nc 侦听器,直到您对它感到满意为止 .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

将标头转储到一个文件中,将响应的有效负载转储到另一个文件中

curl -k -v -u user:pass "url" --trace-ascii headers.txt >> response.txt

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

我设法看到我的传出 Headers (用curl卷曲)的唯一方法是使用以下选项:

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLINFO_HEADER_OUT, true);

获取调试信息:

$data = curl_exec($ch);

var_dump($data);

var_dump(curl_getinfo($ch));

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

我在这里尝试了答案,发现最有用也最简单的答案还没有作为答案列出,但它是:

curl -v https://example.com/path

这将打印出 REQUEST 标头以及 RESPONSE 标头以及其他有用的 Headers ,例如SSL证书以及是否重用了现有的TCP连接 . 当然, -v 标志可以与其他标志组合,例如遵循重定向并提示进行HTTP身份验证:

curl -vL --user my_username https://example.com/path

希望这可以帮助 .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

你可以使用 -iv 看到它

$> curl -ivH "apikey:ad9ff3d36888957" --form "file=@/home/mar/workspace/images/8.jpg" --form "language=eng" --form "isOverlayRequired=true" https://api.ocr.space/Parse/Image

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

您可以使用wireshark或tcpdump查看任何网络流量(http也是如此) .

e15298c6a3b4591803e154ab0c3b3e2e.png

3 years ago

该问题未指定名称为 curl 的命令行命令或整个cURL库 .

以下使用cURL库的PHP代码使用第一个参数作为HTTP方法(例如“GET”,“POST”,“OPTIONS”),第二个参数作为URL .

$ch = curl_init();

$f = tmpfile(); # will be automatically removed after fclose()

curl_setopt_array($ch, array(

CURLOPT_CUSTOMREQUEST => $argv[1],

CURLOPT_URL => $argv[2],

CURLOPT_RETURNTRANSFER => 1,

CURLOPT_FOLLOWLOCATION => 0,

CURLOPT_VERBOSE => 1,

CURLOPT_HEADER => 0,

CURLOPT_CONNECTTIMEOUT => 5,

CURLOPT_TIMEOUT => 30,

CURLOPT_STDERR => $f,

));

$response = curl_exec($ch);

fseek($f, 0);

echo fread($f, 32*1024); # output up to 32 KB cURL verbose log

fclose($f);

curl_close($ch);

echo $response;

用法示例:

php curl-test.php OPTIONS https://google.com

请注意,结果几乎与以下命令行相同

curl -v -s -o - -X OPTIONS https://google.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值