2016-11-11 133 views
1

我正在嘗試使用curl連接到WS。 我的代碼:使用基本http身份驗證無法正常工作

$url ="https://example?param=ee&param2=rr"; 
$headers = array(
'Content-Type:application/json', 
'Authorization: Basic '. base64_encode("username:password") // <--- 
); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL,$url); 
curl_setopt($curl, CURLOPT_HEADER,true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 

//curl_setopt($curl, CURLOPT_USERPWD, 'username:passwrd'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$curl_response = curl_exec($curl); 

我得到這個錯誤:

'content_type' => NULL, 'http_code' => 0, 'header_size' => 0, 
'request_size' => 0, 'filetime' => -1, 'ssl_verify_result' => 0, 
'redirect_count' => 0, 'total_time' => 0.051353999999999997, 
'namelookup_time' => 0.0032659999999999998, 
'connect_time' => 0.051365000000000001, 'pretransfer_time' => 0, 
'size_upload' => 0, 'size_download' => 0, 'speed_download' => 0, 
'speed_upload' => 0, 'download_content_length' => -1, 
'upload_content_length' => -1, 'starttransfer_time' => 0, 
'redirect_time' => 0, 'certinfo' => array (), 
'primary_ip' => '185.18.224.30', 'primary_port' => 443, 
'local_ip' => '172.23.155.94', 'local_port' => 44608, 
'redirect_url' => '',)error occured during curl exec. 

在我的代碼我無法找出錯誤。錯過了一個參數?

+0

作者:WS你是指網站,而不是.ws網站? – Martin

+0

您沒有使用CURLOPT_USERPWD的原因,而不是自己組裝授權頭? – CBroe

+0

它在標題數組上設置 –

回答

1

嘗試添加:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

默認情況下,當您使用HTTPS服務器上的協議,嫋嫋檢查SSL sertificate,如果它是無效的給出了一個錯誤。上面的這一行關閉了這一點。

+0

雖然這可能是正確的,但值得注意的是,關閉cURL驗證是一種非常糟糕的做法,因爲如果TLS安全網站無法通過身份驗證,它可能無法得到保護。 (然而,修復此驗證可能是另一個問題)。 [參考](https://curl.haxx.se/docs/sslcerts.html) – Martin

0
$url ="https://example?"; 
      $headers = array(
           'Content-Type:application/json', 
           'Authorization: Basic '. base64_encode("username:password") 
          ); 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS,"param=ee&param2=rr"); 
      curl_setopt($ch, CURLOPT_HEADER, true); 
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 

      // execute the request 

      $output = curl_exec($ch); 
+0

你可以編輯你的答案並解釋你改變了什麼以及你的代碼爲什麼工作? – Martin

+0

thx但我是我使用get方法,所以我不需要'curl_setopt($ ch,CURLOPT_CUSTOMREQUEST,「POST」);'' –