【发布时间】:2022-01-01 07:09:29
【问题描述】:
我在 PHP7.2 上使用 curl 库在网站上发送请求。 这是链接:
https://pje.trt15.jus.br/pje-consulta-api/api/processos/dadosbasicos/00114894220185150137
如果在终端上使用 cURL 发送请求,我会得到这些标头和响应:
curl https://pje.trt15.jus.br/pje-consulta-api/api/processos/dadosbasicos/00114894220185150137 -H "x-grau-instancia: 2" -v
* Trying 23.46.150.41...
* TCP_NODELAY set
* Connected to pje.trt15.jus.br (23.46.150.41) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Client hello (1):
* TLSv1.3 (OUT), TLS Unknown, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=www.trt15.jus.br
* start date: Sep 28 17:24:47 2021 GMT
* expire date: Dec 27 17:24:46 2021 GMT
* subjectAltName: host "pje.trt15.jus.br" matched cert's "pje.trt15.jus.br"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
* Using Stream ID: 1 (easy handle 0x55c5a2365600)
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
\> GET /pje-consulta-api/api/processos/dadosbasicos/00114894220185150137 HTTP/2
> Host: pje.trt15.jus.br
> User-Agent: curl/7.58.0
> Accept: */*
> x-grau-instancia: 2
>
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS Unknown, Unknown (23):
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
* TLSv1.3 (IN), TLS Unknown, Unknown (23):
* TLSv1.3 (IN), TLS Unknown, Unknown (23):
< HTTP/2 200
< x-request-id: c85077d1-ce68-4ce5-8e88-744203769ea7
< content-type: application/json
< content-length: 150
< x-frame-options: SAMEORIGIN
< strict-transport-security: max-age=15768000; includeSubDomains; preload
< x-content-type-options: nosniff
< referrer-policy: no-referrer-when-downgrade
< feature-policy: camera 'none'; microphone 'none'
< expires: Mon, 22 Nov 2021 17:10:48 GMT
< cache-control: max-age=0, no-cache, no-store
< pragma: no-cache
< date: Mon, 22 Nov 2021 17:10:48 GMT
< server-timing: cdn-cache; desc=MISS
< server-timing: edge; dur=115
< server-timing: origin; dur=10
<
* Connection #0 to host pje.trt15.jus.br left intact
但是,如果我使用php库,头部是其他的,并且请求没有完成
* Trying 23.46.150.41...
* TCP_NODELAY set
* Connected to pje.trt15.jus.br (23.46.150.41) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: DEFAULT:!DH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=www.trt15.jus.br
* start date: Sep 28 17:24:47 2021 GMT
* expire date: Dec 27 17:24:46 2021 GMT
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
\> GET /pje-consulta-api/api/processos/dadosbasicos/00114894220185150137 HTTP/1.1
Host: pje.trt15.jus.br
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7
content-type: application/json
x-grau-instancia: 2
更新 1
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://pje.trt15.jus.br/pje-consulta-api/api/processos/dadosbasicos/00114894220185150137');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,['x-grau-instancia: 1']);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT:!DH');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36');
curl_setopt($ch, CURLOPT_VERBOSE, true);
$ping = curl_exec($ch);
为什么 curl 库不继续 HTTP2 请求?为什么 hedaers 不一样?
【问题讨论】:
-
可能是一个太旧的 curl 库。尝试升级 PHP。
-
这对我来说不是一个选项,我在 prod env 中使用 pthreads 并且仅适用于 php 7.2 :´(.
-
curl 库与安装在 SO 中的 curl 库不一样?
-
PHP 库是什么意思?为什么不在 PHP 上使用 curl?或使用: curl to php incarnate.github.io/curl-to-php 粘贴您的 curl 并将代码复制到您的代码 echo 结果...您尝试过吗?
-
我应该写扩展而不是库。我在使用 7.1 时有一个带有 curl 的标题错误,后来通过升级到 7.3 解决了这个问题。这只是一个建议。改用 Guzzle 可能会有所帮助?
标签: php ssl curl https php-curl