12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
网络知识 时间:2024-11-25 15:00:37
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
在使用PHP进行Web开发的过程中,常常需要使用curl这个库来发送HTTP请求,与其他API进行交互。然而,在调试过程中会遇到一些问题。为了更有效地进行调试,使用curl调试模式可以帮助
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
curl -v https://www.example.com这时,会得到类似如下的输出:
* Trying 93.184.216.34:443...* TCP_NODELAY set* Connected to www.example.com (93.184.216.34) port 443 (#0)* ALPN, offering h2* ALPN, offering http/1.1* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH* successfully set certificate verify locations:* CAfile: /etc/ssl/certs/ca-certificates.crtCApath: none* TLSv1.3 (OUT), TLS handshake, Client hello (1):* TLSv1.3 (IN), TLS handshake, Server hello (2):* TLSv1.2 (IN), TLS handshake, Certificate (11):* TLSv1.2 (IN), TLS handshake, Server key exchange (12):* TLSv1.2 (IN), TLS handshake, Server finished (14):* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):* TLSv1.2 (OUT), TLS change cipher, Client hello (1):* TLSv1.2 (OUT), TLS handshake, Finished (20):* TLSv1.2 (IN), TLS handshake, Finished (20):* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256* ALPN, server did not agree to a protocol* Server certificate:* subject: C=US; ST=California; L=Los Angeles; O=Internet Corporation for Assigned Names and Numbers; CN=www.example.org* start date: Apr 1 00:00:00 2019 GMT* expire date: Apr 1 23:59:59 GMT* subjectAltName: host "www.example.com" matched cert's "www.example.com"* issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 High Assurance Server CA* SSL certificate verify ok.>GET / HTTP/1.1>Host: www.example.com>User-Agent: curl/7.54.0>Accept: */*>< HTTP/1.1 200 OK< Cache-Control: max-age=604800< Content-Type: text/html; charset=UTF-8< Date: Wed, 25 Sep 2019 07:48:50 GMT< Etag: "1541025663"< Expires: Wed, 02 Oct 2019 07:48:50 GMT< Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT< Server: ECS (dca/249A)< Vary: Accept-Encoding< X-Cache: HIT< Content-Length: 1270<{ [1270 bytes data]* Connection #0 to host www.example.com left intact这里,每一行前都带有 * 开头。首先,curl 尝试建立与 www.example.com 的 TCP 连接,然后发起 TLS 握手。之后,向服务器发送 HTTP 请求,收到响应后打印出来。在响应头下面,我们可以看到返回的 HTML 代码。2. 设置请求头有时候我们需要在 HTTP 请求的 header 里添加一些自定义信息。通过 curl 命令的 -H 选项即可完成。以发送一条携带自定义 User-Agent 的 GET 请求为例:
curl -v -H 'User-Agent: MyClient/1.0' https://www.example.com这里,我们使用了 -H 'User-Agent: MyClient/1.0' 选项来指定 User-Agent 信息,也可以添加其他的请求头。3. 设置请求方法默认情况下,curl 发送的 HTTP 请求方法为 GET。如果需要发送 POST 请求,则需要通过 -X 选项来指定请求方法:
curl -v -X POST https://www.example.com4. 设置请求体有时候,我们需要向服务器发送一些数据,例如表单提交。此时,可以通过 -d 选项来设置请求体:
curl -v -d 'name=John&age=20' https://www.example.com这里,我们向服务器发送了一条 POST 请求,并在请求体中添加了表单数据。5. 跟踪重定向当发送的 HTTP 请求遇到重定向时,curl 默认不会跟踪重定向。如果想要跟踪重定向并获取所有信息,需要通过 -L 选项来开启:
curl -v -L https://www.example.com在这里,我们向 www.example.com 发起 GET 请求,如果收到 3xx 类 HTTP 响应码,curl 会自动跟踪重定向。通过添加 -L 选项,我们可以看到每个请求的详细信息。6. HTTPS 证书验证curl 默认会验证 HTTPS 的证书。如果使用的是自签名证书,可能会因为验证不通过而无法建立连接。在开发和测试环境中,我们通常使用未经验证的自签名证书,这时需要通过 -k 选项来关闭证书验证:
curl -v -k https://www.example.com这里,我们向 www.example.com 发送 HTTP 请求,但不验证 HTTPS 证书。在实际开发中,将 curl 命令直接复制到命令行中执行比较繁琐。可以将 curl 命令封装成一个函数,以便在 PHP 代码中调用。例如:
function curl ($url, $method = 'GET', $data = null, $headers = []){$ch = curl_init();curl_setopt_array($ch, [CURLOPT_URL =>$url,CURLOPT_RETURNTRANSFER =>true,CURLOPT_FOLLOWLOCATION =>true,CURLOPT_CUSTOMREQUEST =>$method,CURLOPT_POSTFIELDS =>$data,CURLOPT_HTTPHEADER =>$headers,CURLOPT_HEADER =>true,]);$response = curl_exec($ch);$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);curl_close($ch);$headers = substr($response, 0, $header_size);$body = substr($response, $header_size);return compact('headers', 'body');}以上代码将 curl 封装为一个函数,接收参数包括请求 URL、请求方法、请求体、请求头。调用后,返回包括响应头和响应体的数组。总结在本文中,我们介绍了如何使用 curl 调试模式,并通过一些例子介绍了 curl 命令的一些常用选项。在开发和测试过程中,这些技巧能够帮助我们更有效地解决问题,并更好地理解 HTTP 请求和响应的过程。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19