[英]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.