首頁 >後端開發 >php教程 >Web登入Authorization驗證

Web登入Authorization驗證

WBOY
WBOY原創
2016-08-08 09:06:482015瀏覽

透過Http存取伺服器的一個服務軟體的數據,瀏覽器會彈出以下驗證彈框:
Web登入Authorization驗證

由於想用PHP curl方法取得數據,但不知道怎麼設定使用者名稱和密碼驗證參數:
這樣發現不起作用:

<code>curl_setopt($curl, CURLOPT_USERPWD, "name:pwd"); 
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); </code>

使用postman模擬登陸登陸以後我發現請求頭裡面有一項:
Web登入Authorization驗證

接著在PHP curl方法裡面加了一個請求頭:

<code>curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json','Authorization:Basic TnhFY29AMjAxNjojQGlIeVg0eStHUFE='));</code>

這樣就能請求到資料了。
但問題是由於腳本需要放到伺服器上一直運行,這種寫死的驗證過期就又驗證失敗,沒有權限了。
怎麼能夠設定php Curl 使用者名稱密碼參數 方法一直驗證登入呢?

回覆內容:

透過Http存取伺服器的一個服務軟體的數據,瀏覽器會彈出以下驗證彈框:
Web登入Authorization驗證

由於想用PHP curl方法取得數據,但不知道怎麼設定使用者名稱和密碼驗證參數:
這樣發現不起作用:

<code>curl_setopt($curl, CURLOPT_USERPWD, "name:pwd"); 
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); </code>

使用postman模擬登陸登陸以後我發現請求頭裡面有一項:
Web登入Authorization驗證

接著在PHP curl方法裡面加了一個請求頭:

<code>curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json','Authorization:Basic TnhFY29AMjAxNjojQGlIeVg0eStHUFE='));</code>

這樣就能請求到資料了。
但問題是由於腳本需要放到伺服器上一直運行,這種寫死的驗證過期就又驗證失敗,沒有權限了。
怎麼能夠設定php Curl 使用者名稱密碼參數 方法一直驗證登入呢?

這是PHP HTTP驗證,一般都不這麼乾,畢竟HTTP驗證太簡陋了

http://php.net/manual/zh/feat...

<code>$username='ABC';
$password='XYZ';
$URL='<URL>';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
$result=curl_exec ($ch);
curl_close ($ch);</code>

  1. 使用CURL模擬登入拿到Authorization Token

  2. 使用第1步驟拿到的Token進行下一步請求

第1步驟中的Token可以適當做下緩存,快取時間視服務端而定。
題外話:個人感覺服務端那邊是Yii2寫的。

之前有做過類似的 搞了半天覺得太麻煩,最後用phantomjs解決。 php呼叫node程式。

加個這屬性

<code>$user = 'hello';
$pass = '$world';
curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$pass}");  </code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn