Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在向服务器发送请求时,如何查看curl发出的请求头?_Curl - Fatal编程技术网

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

在向服务器发送请求时,如何查看curl发出的请求头?,curl,Curl,我想在向服务器发送请求时查看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:

我想在向服务器发送请求时查看
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
(它会生成几百行输出,但会提到很多选项)。或者找到对选项含义有更多解释的地方。

curl{filename}或者使用一个破折号而不是文件名将其发送到stdout:

curl --trace-ascii - {URL}
如果您使用的是libcurl


这显示了curl发送和接收的所有内容,并添加了一些额外的信息。

您可以使用或查看任何网络流量(http)。

我查看传出头的唯一方法(curl with php)是使用以下选项:

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));
我认为
curl--verbose/-v
是最简单的。它将吐出请求头(前缀为“>”的行),而无需写入文件:

$ 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
...
$curl-v-I-H“测试:测试头,让您看到它的工作原理”http://stackoverflow.com/
*即将连接()到stackoverflow.com端口80(#0)
*正在尝试69.59.196.211。。。有联系的
*已连接到stackoverflow.com(69.59.196.211)端口80(#0)
>HEAD/HTTP/1.1
>用户代理:curl/7.16.3(i686 pc cygwin)libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
>主机:stackoverflow.com
>接受:*/*
>测试:测试标题,这样您就可以看到它的工作原理了
>
这是我用php编写的http客户端,用于使用包含的cookies进行post查询:

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);
///调试信息 回音$应答; 变量转储(curl_getinfo($ch)); ///


这个问题没有指定名为
curl
的命令行命令是指整个curl库

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

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

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

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

curl -k -v -u user:pass  "url" --trace-ascii headers.txt >> response.txt
curl-s-v-o/dev/null-H“Testheader:test”http://www.example.com
如果您想发送HEAD请求而不是GET请求,您也可以使用
-I
选项。

向发送一个示例请求,并通过相应的查找器url检查此请求包含的内容(请求头、请求正文、请求参数)。您可以使用任何字符串而不是
某个唯一id
,查看更多详细信息。

我在此处尝试了答案,发现最有用和最简单的答案尚未列为答案,但它是:

curl -v https://example.com/path
这将打印出请求头、响应头以及其他有用的头,例如SSL证书以及是否重用了现有TCP连接。当然,
-v
标志可以与其他标志组合使用,例如跟踪重定向和提示进行HTTP身份验证:

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

希望这有帮助。

您可以使用
-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

我知道这有点晚了,但我最喜欢的方法是
netcat
,因为您可以准确地获得
curl
发送的内容;这可能不同于
--trace
--trace ascii
选项,后者无法正确显示非ascii字符(它们仅显示为点或需要解码)

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

nc -l localhost 12345
这将在本地计算机的端口12345上打开侦听进程

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

curl --form 'foo=bar' localhost:12345
在第一个终端窗口中,您将看到curl在请求中发送的内容

现在当然
nc
不会发送任何响应(除非您自己键入),因此您需要中断curl命令(control-c)并为每个测试重复该过程

然而,这对于简单地调试您的请求来说是一个有用的选项,因为您不需要在任何地方进行往返,也不需要在某个地方生成虚假的、迭代的请求,直到您得到正确的结果;一旦您对该命令感到满意,只需将其重定向到有效的URL即可


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

下面这样的命令将显示三个部分:请求头、响应头和数据(由CRLF分隔)。它避免了curl带来的技术信息和语法噪音

curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'
curl-vs www.stackoverflow.com 2>&1|sed'/^*/d/字节数据]$/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>
GET/HTTP/1.1
主持人:www.stackoverflow.com
用户代理:curl/7.54.0
接受:*/*
HTTP/1.1 301永久移动
内容类型:text/html;字符集=UTF-8
地点:https://stackoverflow.com/
内容长度:149
接受范围:字节
日期:2019年1月16日星期三20:28:56 GMT
通孔:1.1清漆
连接:保持活力
X服务方:cache-bma1622-BMA
X-Cache:小姐
X缓存命中率:0
X定时器:S1547670537.588756,VS0,VE105
变化:快速SSL
X-DNS-预取-控制:关闭
设置Cookie:prov=e4b211f7-ae13-dad3-9720-167742a5dff8;domain=.stackoverflow.com;expires=周五,2055年1月1日00:00:00 GMT;路径=/;HttpOnly
文件移动
对象已移动可以找到此文档
说明:

  • -vs
    -添加标题(-v),但删除进度条(-s)
  • 2>&1
    -将标准输出和标准输出合并为单个标准输出
  • sed
    -
    nc -l localhost 12345
    
    curl --form 'foo=bar' localhost:12345
    
    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>