簡體   English   中英

使用HTTPS在特定端口上使用Curl POST數據

[英]POST data with Curl on a specific port with HTTPS

我嘗試通過POST將數據發送到我的應用程序。 網址有點棘手,僅在特定端口上使用https

這是我的代碼

$url = 'https://mysite.com/foo.php';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);

if ($type == "POST") {
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}

if ($environment == 'test') {
   curl_setopt($curl, CURLOPT_PORT, 1234);
}


$result = curl_exec($curl);

if (curl_errno($curl) > 0) {
   $result = 'Internal server error, error: ' . curl_errno($curl);
}
curl_close($curl);

它返回錯誤7 Failed to connect() to host

我做錯了什么?

更新

在bodi0建議之后,我添加了

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);

UPDATE2

這是網絡問題,我的代碼還可以...

嘗試像這樣設置端口號:

curl_setopt($curl, CURLOPT_PORT, 8088); 其中8088是您的實際端口號。

處理SSL請求的正確方法還包括設置CURLOPT_CAINFO參數:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . "/folder/your-secure-certificate.crt");

這樣可以確保您的cURL會話不僅信任任何服務器證書

例如,如果攻擊者以某種方式將流量api.example.com 重定向到其自己的服務器,則此處cURL會話將無法正確初始化 ,因為攻擊者將無法訪問服務器證書 (即沒有私鑰) )受到我們添加的CA的信任。

編輯:

許多托管公司不允許您的PHP程序將連接“返回”到您自己的主機,因此也許就是這種情況。 另外,請嘗試應用在局域網中使用的代理設置,看看它是否有效,如有必要,請將其添加到您的代碼中:

$proxy = '127.0.0.1:8888';

curl_setopt($curl, CURLOPT_PROXY, $proxy);

暫無
暫無

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

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