簡體   English   中英

卷曲SSL請求400錯誤請求

[英]Curl SSL Request 400 Bad Request

我正在嘗試使用php和curl發出請求。 這是我從命令行使用的工作示例

curl -k --cacert c:/cert/server_ca.pem  --cert c:/cert/signed_client_cert.pem --key c:/cert/cert_req_rsa_private_key.pem 

這是我到目前為止的內容,它返回一個400錯誤的請求,有人知道我如何得到更多有用的錯誤或我可能做錯了什么嗎?

ini_set('display_errors',1);
//phpinfo();

$cert = "C:/cert/signed_client_cert.pem";
$key = "C:/cert/cert_req_rsa_private_key.pem";
$pass = "key1123";
$caInfo = "C:/cert/server_ca.pem";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.apitest.com/v/2/products/04003274058");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_CAINFO, $caInfo);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLKEY, $key);
curl_setopt($ch, CURLOPT_VERBOSE, true);
//curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pass);
//curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
//curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $pass);
//curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');


$response = curl_exec($ch);
echo curl_error($ch);
echo var_dump($response);

curl命令不完整,因此很難說出可能不同之處。 但是在命令行中,Curl使用Accept: */* ; 並且不使用Content-Type (有關curl www.google.com請參見下面的Wireshark截圖curl www.google.com )。

要了解AcceptContent-Type之間的區別,請參閱Webmasters Stack Exchange上的accept和content-type http標頭之間的區別

在此處輸入圖片說明


只是自行車脫落,但這還有改進的余地:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

如果您覺得必須那樣使用它,請選擇一個匿名協議。 因為無論如何都無法進行驗證,所以它將避免服務器發送證書。

奇怪的是,這個問題似乎是Php卷曲的錯誤,我切換到了httprequest,它起作用了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM