2016-07-15 51 views
2

您好,我有命令行代碼:捲曲HTTP認證工作,完善在命令行但不PHP

curl 'http://192.168.0.1:80/' -H 'Authorization: Basic my_auth' 

在PHP中:

$process = curl_init($ip); 
//just for "shore" 
      curl_setopt($data, CURLOPT_HTTPHEADER, 
      array(
       "Authorization: Basic " . base64_encode($username . ":" . $password) 
      )); 
      curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
      curl_setopt($process, CURLOPT_USERPWD, $login . ":" . $password); 
      curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 10); 
      curl_setopt($process, CURLOPT_TIMEOUT, 10); 

      curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($process, CURLOPT_VERBOSE, 1); 
      curl_setopt($process, CURLOPT_HEADER, 1); 

      $return = curl_exec($process); 

的結果我看到:401 ... 在apache2的日誌:

  • HTTP 1.0,假設靠近身體< HTTP後/1.0 401未經授權<日期:星期五,2016年7月15日9點27分20秒GMT <服務器:寶兒/ 0.94.13 < 連接:關閉< WWW身份驗證:基本境界= 「服務」 < 內容類型:text/HTML; charset = ISO-8859-1 < Set-Cookie: SESSIONID = 068054d0; <
  • 關閉連接53
  • 發行請求給此URL: ''
  • 主機名(在192.168.0.1 DNS緩存
  • 試圖192.168.0.1發現...
  • 連接到192.168.0.1基本my_code主機::使用基本與用戶 '管理員'

    GET/HTTP/1.0授權)端口80(#54)

  • 服務器授權192.1 68.0.1接受:/

  • HTTP 1.0,假設身體< HTTP/1.0 401未經授權<日期後收盤:週五,2016年7月15日9點27分二十零秒GMT <服務器:寶兒/ 0.94.13 < 連接:關閉

  • 身份驗證問題。忽略這一點。 < WWW-Authenticate:Basic realm =「service」< Content-Type:text/html; charset = ISO-8859-1 < Set-Cookie:SESSIONID = 068054d0; <
  • 關閉連接54
  • +0

    天哪,巨大的錯誤))) 「上岸」=> 「確定」)SRY我的英文不好 – Melixion

    +0

    解決: curl_setopt($過程,CURLOPT_COOKIEFILE, 'cookiefile.txt'); – Melixion

    回答

    0

    那不是如何使用curl發送基本認證。對於Basic,預期的標題是Authorization: Basic <base64 encoded string>,其中編碼的字符串是「:」。使用curl(假設沒有其他配置)使用「-u」開關來完成此OOTB的方法。例如:

    curl -u "user:pass" http://<endpoint>/ 
    

    如果您發送標題「手動」,您必須首先對base64進行編碼。

    現在,您的PHP代碼正確,您的curl調用不正確。這意味着服務如何解釋Authorization存在問題。