簡體   English   中英

exec('curl -k…')的curl_setopt等價是什么

[英]What is the curl_setopt equivalent of exec('curl -k …')

我正在嘗試復制此命令的功能:

exec('curl -k -d "pameters=here" https://apiurlhere.com', $output);

與curl_exec():

$url =  'https://apiurlhere.com?parameters=here';
$ci = curl_init();
curl_setopt($ci, CURLOPT_POST, TRUE);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_URL, $url);
$response = curl_exec($ci);
curl_close ($ci);
print_r($response);

我一直在嘗試在文檔(http://php.net/manual/zh/function.curl-setopt.php)中找到的其他選項,並認為它是CURLOPT_SSL_VERIFYPEER,但仍然失敗(響應返回為空)。

我張貼到的URL使用SNI,當SSL證書返回的主機名與預期不同時,這會導致cURL失敗。

是否有一個等同於-k的curl_setopt?

嘗試:

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

參見http://www.php.net/manual/en/function.curl-setopt.php

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)與命令行上的-k等效(您不應該真正使用它,因為它會使連接容易受到MITM攻擊)。

您的問題是,假設-d "pameters=here"等同於將這些參數放入URL查詢中,例如https://apiurlhere.com?parameters=here

並非如此,請參見-d文檔:

(HTTP)將POST請求中的指定數據發送到HTTP服務器,就像用戶填寫HTML表單並按Submit按鈕時瀏覽器所做的一樣。 這將導致curl使用內容類型application / x-www-form-urlencoded將數據傳遞到服務器。

您可能應該為此使用POSTFIELDS

curl_setopt($ch, CURLOPT_POSTFIELDS, array("parameters" => "here"));

暫無
暫無

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

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