我正在嘗試將下面的 curl 命令轉換為對 PHP curl 代碼的 JSON 回應。
curl -X POST --tls-max 1.2 --insecure https://xxxxxxxxx.com/getkey --cert client.crt --key client.key --header "Content-Type: application/json" --data "{\"param1\": \"value1\", \"param2\": \"value2\"}"
我的 PHP 代碼是,
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://xxxxxxx.com/getkey");
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($curl, CURLOPT_SSLCERT, "/var/www/html/certs/client.crt");
curl_setopt($curl, CURLOPT_SSLKEY, "/var/www/html/certs/client.key");
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_MAXREDIRS, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$header = array('Content-Type: application/json');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
$result = curl_exec($curl);
curl_close($curl);
return $result;
當我運行這個 PHP 代碼時,我遇到了以下錯誤。
* About to connect() to xxxxxxx.com port 443 (#1)
* Trying xx.xxx.xxx.xxx...
* Connected to xxxxxxx.com (xx.xxx.xxx.xxx) port 443 (#1)
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
* subject: CN=*.xxxxx.com,O="xxxxxxxxxx.",L=xxxxxxxx,ST=xxxxxx,C=US
* start date: Nov 10 00:00:00 2021 GMT
* expire date: Nov 10 23:59:59 2022 GMT
* common name: *.xxxxx.com
* issuer: CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US
> POST /getkey HTTP/1.1
Host: xxxxxxx.com
Accept: */*
Content-Length: 272
Expect: 100-continue
Content-Type: application/json; boundary=----------------------------d7326044efb7
* skipping SSL peer certificate verification
* NSS: client certificate from file
* subject: CN=XXX-Dev-Client
* start date: Sep 09 04:00:00 2020 GMT
* expire date: Sep 09 04:00:00 2040 GMT
* common name: XXX-Dev-Client
* issuer: CN=CARoot-XXX-Dev
< HTTP/1.1 100 Continue
< HTTP/1.1 404 Not Found
< Connection: Close
< Content-Type: application/json
<
* Closing connection 1
我缺少什么設定來獲取 100 和 404 代碼。
注意:當我使用 shell_exec() 執行 curl 命令時,我得到了 json 回應,但是當我只使用 PHP curl 時,我得到了上述錯誤。
uj5u.com熱心網友回復:
嘗試禁用發送Expect: 100-continue:
$header = array('Expect:', 'Content-Type: application/json');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
用于測驗目的的 curl 相同
curl -X POST --tls-max 1.2 --insecure https://xxxxxxxxx.com/getkey --cert client.crt --key client.key -H "Expect:" -H "Content-Type: application/json" --data "{\"param1\": \"value1\", \"param2\": \"value2\"}"
您似乎錯誤地發布了 JSON。正確的帖子資料
$payload = json_encode($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
uj5u.com熱心網友回復:
感謝@273K 的解決方案。
此錯誤的原因是,我沒有將 POST 資料轉換為 JSON 格式。使用 json_encode 將 POST 資料轉換為 JSON 格式后,它起作用了,我能夠從 URL 獲得回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497835.html
