当我向服务器发送请求时,我想看到curl所做的请求头。我要怎么检查呢?
当前回答
我知道这有点晚了,但我最喜欢的方法是netcat,因为你得到了确切的旋度发送;这可能与——trace或——trace-ascii选项不同,后者不会正确显示非ascii字符(它们只显示为点或需要解码)。
你可以很容易地通过打开两个终端窗口,在第一种类型:
nc -l localhost 12345
这将在本地机器的端口12345上打开一个监听进程。
在第二个终端窗口中输入curl命令,例如:
curl --form 'foo=bar' localhost:12345
在第一个终端窗口中,您将确切地看到请求中发送的curl。
当然现在nc不会发送任何响应(除非你自己输入),所以你需要中断curl命令(control-c),并为每个测试重复这个过程。
然而,这对于简单地调试请求是一个有用的选项,因为您不需要在任何地方进行往返,也不需要在任何地方生成虚假的迭代请求,直到您得到正确的请求;一旦你对这个命令感到满意,只需将它重定向到一个有效的URL,你就可以开始了。
您也可以为任何cURL库做同样的事情,只需编辑您的请求以指向本地nc侦听器,直到您满意为止。
其他回答
我尝试了这里的答案,发现最有用和最简单的一个还没有被列为答案,但它是:
curl -v https://example.com/path
这将打印出REQUEST报头、RESPONSE报头以及其他有用的信息,如SSL证书以及是否重用了现有的TCP连接。当然,-v标志可以与其他标志结合使用,例如跟随重定向和HTTP认证提示:
curl -vL --user my_username https://example.com/path
希望这能有所帮助。
Curl——trace-ascii {filename}或使用单个破折号来代替文件名,将其发送到标准输出:
curl --trace-ascii - {URL}
CURLOPT_DEBUGFUNCTION如果你使用libcurl
这显示了curl发送和接收的所有内容,并附带了一些额外的信息。
下面是我的http客户端在php使post查询包含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);
///调试信息 echo $响应; 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
如下所示的命令将显示三个部分:请求头、响应头和数据(由CRLF分隔)。它避免了curl添加的技术信息和语法噪声。
curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'
该命令将产生如下输出:
GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>
描述:
-vs -添加报头(-v)但删除进度条(-s) 2>&1 -将stdout和stderr合并为单个stdout 使用下面的命令由curl生成的Sed编辑响应 /^* /d -删除以“*”开头的行(技术信息) $/d -删除以'bytes data]结尾的行(技术信息) S /> // -删除'> '前缀 S /< // -删除'< '前缀
向https://http-tools.appspot.com/reflect-http-request/some-unique-id发送一个示例请求,并通过其对应的查找器url https://http-tools.appspot.com/reflect-http-request-finder/some-unique-id检查该请求包含什么(请求头、请求体、请求参数)。你可以使用任何字符串而不是某个唯一的id,查看https://http-tools.appspot.com了解更多细节。
推荐文章
- 从URL执行bash脚本
- PHP中的cURL是什么?
- 对bash脚本函数中定义的变量使用curl POST
- 使用curl POST multipart/form-data的正确方法是什么?
- PHP -调试Curl
- (1) libcurl不支持或禁用https协议
- 在尝试访问HTTPS url时,如何使用cURL处理证书?
- 如何使用PHP 7安装ext-curl扩展?
- 如何通过JSON文件传递有效载荷卷曲?
- 编写器安装错误——当它实际启用时需要ext_curl
- 如何使用Python执行cURL命令?
- CURL命令行URL参数
- 我如何为卷曲设置请求头?
- 在PHP中设置Curl的超时
- curl:(35)错误:1408F10B:SSL例程:ssl3_get_record:错误的版本号