$ 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
...
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
13 回答
如果要发送HEAD请求而不是GET请求,也可以使用
-I
选项 .我认为
curl -v
是最简单的 . 它将吐出请求 Headers (前缀为'>'的行),而不必写入文件:curl --trace-ascii 或使用单个破折号而不是文件名将其发送到stdout:
CURLOPT_DEBUGFUNCTION如果您使用的是libcurl
这会向您显示curl发送和接收的所有内容,并提供一些额外的信息 .
这是我在php中的http客户端,用于包含cookie的帖子查询:
/// DEBUG info echo $ response; var_dump(curl_getinfo($ ch)); ///
curl的
--trace-ascii
选项将显示请求标头,以及响应标头和响应正文 .例如,命令
生成一个文件
curl.trace
,其开头如下:它还得到了一个响应(一个302响应,确切但无关紧要) .
如果您只想保存响应标头,请使用
--dump-header
选项:如果您需要有关可用选项的更多信息,请使用
curl --help | less
(它会产生几百行输出,但会提到很多选项) . 或者找到manual page,其中有更多解释选项的含义 .我知道这有点晚了,但我最喜欢这样做的方法是
netcat
,因为你得到了curl
发送的内容;这可能与--trace
或--trace-ascii
选项不同,后者不能正确显示非ASCII字符(它们只显示为点或需要解码) .您可以通过打开第一个类型的两个终端窗口来轻松完成此操作:
这将在本地计算机的端口12345上打开侦听进程 .
在第二个终端窗口中输入curl命令,例如:
在第一个终端窗口中,您将看到 exactly 请求中发送的卷曲 .
当然
nc
当然不会发送任何响应(除非你自己输入),所以你需要中断curl命令(control-c)并重复每个测试的过程 .但是,这对于简单地调试您的请求是一个有用的选项,因为您不会在任何地方进行往返,或者在某个地方产生虚假的迭代请求,直到您做到正确为止;一旦你对命令感到满意,只需将其重定向到一个有效的URL,你就可以了 .
您也可以对任何cURL库执行相同操作,只需编辑您的请求以指向本地
nc
侦听器,直到您对它感到满意为止 .将标头转储到一个文件中,将响应的有效负载转储到另一个文件中
向https://http-tools.appspot.com/reflect-http-request/some-unique-id发出一个示例请求,并通过相应的查找器URL https://http-tools.appspot.com/reflect-http-request-finder/some-unique-id检查此请求包含的内容(请求标头,请求正文,请求参数) . 您可以使用任何字符串而不是
some-unique-id
,有关详细信息,请查看https://http-tools.appspot.com .我设法看到我的传出 Headers (用curl卷曲)的唯一方法是使用以下选项:
获取调试信息:
我在这里尝试了答案,发现最有用也最简单的答案还没有作为答案列出,但它是:
这将打印出 REQUEST 标头以及 RESPONSE 标头以及其他有用的 Headers ,例如SSL证书以及是否重用了现有的TCP连接 . 当然,
-v
标志可以与其他标志组合,例如遵循重定向并提示进行HTTP身份验证:希望这可以帮助 .
你可以使用
-iv
看到它您可以使用wireshark或tcpdump查看任何网络流量(http也是如此) .
该问题未指定名称为
curl
的命令行命令或整个cURL库 .以下使用cURL库的PHP代码使用第一个参数作为HTTP方法(例如“GET”,“POST”,“OPTIONS”),第二个参数作为URL .
用法示例:
请注意,结果几乎与以下命令行相同