排名编程语言Ratings同比上月
1Python11.77%-0.35%
2C10.72%-5.49%
3Java10.72%-0.96%
4C++8.28%+0.69%
5C#6.06%+1.39%
6Visual Basic5.72%+1.72%
7JavaScript2.66%+0.63%
8Assembly language2.52%+1.35%
9SQL2.11%+0.58%
10PHP1.81%+0.02%
11Classic Visual Basic1.56%+0.83%
12Groovy1.51%-0.00%
13Ruby1.43%+0.22%
14Swift1.43%+0.08%
15R1.28%-0.36%
16Perl1.22%-0.29%
17Delphi/Object Pascal1.22%+0.36%
18Go1.21%-0.16%
19Fortran1.19%+0.79%
20MATLAB1.17%+0.07%

在Linux中, curl是个很有用的命令. 有时候我们请求需要查看请求头或者响应头的大小,请求花费的时间?
具体代码如下:
curl -w '请头大小: %{size_request}byte; 上传大小: %{size_upload}; 响应头大小: %{size_header}byte; 总的响应数据大小:%{size_download}byte; 总耗时: %{time_total}秒' 'http://www.baidu.com' 结果类似下图
企业微信截图_75d1cc35-0786-400c-a362-3994caf5ca00.png

关于查看请求时间, 还有个查看更细致时间的方法, 如下,每个步骤完成的时间都会记录.
curl -v --trace-time http://www.baidu.com 结果类似下图
企业微信截图_0b58dc5d-6172-49db-9906-edb658bef445.png

有时候接口问题比较难调, 需要整个完整请求链路过程的记录. 有了请求报文和响应报文,就很好的定位问题. curl是支持打印出这些信息的, 很简单,一行配置搞定. 话不多说,直接上代码(将如下配置放在curl_exec前即可了)

$f = fopen('curl_debug', 'wb');
curl_setopt($ch,CURLOPT_VERBOSE,true);//默认是标准错误输出中
curl_setopt($ch,CURLOPT_STDERR ,$f);//有了该指令,请求过程记录会写到该文件中

文件中内容,大概是如下(本身输出内容是不包含响应body的,有需要你可自己追加在该文件后,便更好查看)

*   Trying 14.215.177.39...
* TCP_NODELAY set
* Connected to www.baidu.com (14.215.177.39) port 80 (#0)
> GET / HTTP/1.1
Host: www.baidu.com
Accept: */*

< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: no-cache
< Connection: keep-alive
< Content-Length: 14615
< Content-Type: text/html
< Date: Tue, 02 Nov 2021 16:34:39 GMT
< Pragma: no-cache
< Server: BWS/1.1
< Vary: Accept-Encoding
< 
* Connection #0 to host www.baidu.com left intact

ps: 有点需要注意, curl本身的bug,导致如果CURLINFO_HEADER_OUT设置为true时(即开启输出响应头), CURLOPT_VERBOSE会不生效.所以你需要将CURLINFO_HEADER_OUT配置去掉.

用这种方法不仅优雅,而且是最准确.像自己根据响应的换行去分隔会有不准确的情况发生.

$headers = [];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// this function is called by curl for each header received
curl_setopt($ch, CURLOPT_HEADERFUNCTION,
  function($curl, $header) use (&$headers)
  {
    $len = strlen($header);
    $header = explode(':', $header, 2);
    if (count($header) < 2) // ignore invalid headers
      return $len;

    $headers[strtolower(trim($header[0]))][] = trim($header[1]);

    return $len;
  }
);

$data = curl_exec($ch);
print_r($headers);