最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP curl 或 file_get_contents 獲取需要授權(quán)頁面的方法

 更新時間:2017年05月05日 11:12:30   作者:傲雪星楓  
本篇文章主要介紹了PHP curl 或 file_get_contents獲取需要授權(quán)頁面的方法,具有很好的參考價值。下面跟著小編一起來看下吧

今天因工作需要,需要用 curl / file_get_contents 獲取需要授權(quán)(Authorization)的頁面內(nèi)容,解決后寫了這篇文章分享給大家。

PHP curl 擴(kuò)展,能夠在服務(wù)器端發(fā)起POST/GET請求,訪問頁面,并能獲取頁面的返回數(shù)據(jù)。

例如要獲取的頁面:http://localhost/server.php

<?php 
$content = isset($_POST['content'])? $_POST['content'] : ''; 
header('content-type:application/json'); 
echo json_encode(array('content'=>$content)); 
?> 

使用curl獲取server.php頁面

<?php 
$url = 'http://localhost/server.php'; 
$param = array('content'=>'fdipzone blog'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$ret = curl_exec($ch); 
$retinfo = curl_getinfo($ch); 
curl_close($ch); 
if($retinfo['http_code']==200){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo 'POST Fail'; 
} 
?> 

如果服務(wù)沒有安裝php curl擴(kuò)展,使用file_get_contents也可以實現(xiàn)發(fā)起請求,獲取頁面返回數(shù)據(jù)

<?php 
$url = 'http://localhost/server.php'; 
$param = array('content'=>'fdipzone blog'); 

$opt = array( 
 'http' => array( 
  'method' => 'POST', 
  'header' => 'content-type:application/x-www-form-urlencoded', 
  'content' => http_build_query($param) 
 ) 
); 

$context = stream_context_create($opt); 

$ret = file_get_contents($url, false, $context); 

if($ret){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo 'POST Fail'; 
} 
?> 

使用curl 和 file_get_contents 返回的結(jié)果都是一樣的。

Array 
( 
 [content] => fdipzone blog 
) 

對于需要授權(quán)的頁面,例如使用了htpasswd+.htaccess設(shè)置目錄訪問權(quán)限的頁面,直接用上面的方法會返回401 Unauthorized錯誤。

這次的例子先不使用htpasswd+.htaccess來控制訪問權(quán)限,而使用 $_SERVER['PHP_AUTH_USER'] $_SERVER['PHP_AUTH_PW']這兩個服務(wù)器參數(shù)。

http://localhost/server.php 修改為:

<?php 
if(!isset($_SERVER['PHP_AUTH_USER'])) 
{ 
 header('WWW-Authenticate: Basic realm="localhost"'); 
 header("HTTP/1.0 401 Unauthorized"); 
 exit; 
}else{ 
 if (($_SERVER['PHP_AUTH_USER']!= "fdipzone" || $_SERVER['PHP_AUTH_PW']!="654321")) { 
  header('WWW-Authenticate: Basic realm="localhost"'); 
  header("HTTP/1.0 401 Unauthorized"); 
  exit; 
 } 
} 
$content = isset($_POST['content'])? $_POST['content'] : ''; 
header('content-type:application/json'); 
echo json_encode(array('content'=>$content)); 
?> 

設(shè)定帳號:fdipzone 密碼:654321

curl中,有一個參數(shù)是 CURLOPT_USERPWD,我們可以利用這個參數(shù)把帳號密碼在請求時發(fā)送過去。

curl_setopt($ch, CURLOPT_USERPWD, '帳號:密碼'); 

curl請求的程序修改為:

<?php 
$url = 'http://localhost/server.php'; 
$param = array('content'=>'fdipzone blog'); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, 'fdipzone:654321'); // 加入這句 
$ret = curl_exec($ch); 
$retinfo = curl_getinfo($ch); 
curl_close($ch); 
if($retinfo['http_code']==200){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo 'POST Fail'; 
} 
?> 

而file_get_contents 如果要發(fā)送帳號和密碼,需要手動拼接header

file_get_contents 請求的程序修改為:

<?php 
$url = 'http://localhost/server.php'; 
$param = array('content'=>'fdipzone blog'); 

$auth = sprintf('Authorization: Basic %s', base64_encode('fdipzone:654321')); // 加入這句 

$opt = array( 
 'http' => array( 
  'method' => 'POST', 
  'header' => "content-type:application/x-www-form-urlencoded\r\n".$auth."\r\n", // 把$auth加入到header 
  'content' => http_build_query($param) 
 ) 
); 

$context = stream_context_create($opt); 

$ret = file_get_contents($url, false, $context); 

if($ret){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo 'POST Fail'; 
} 
?> 

源碼下載地址:點擊查看

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • PHP file_get_contents 函數(shù)超時的幾種解決方法

    PHP file_get_contents 函數(shù)超時的幾種解決方法

    在使用file_get_contents函數(shù)的時候,經(jīng)常會出現(xiàn)超時的情況,在這里要通過查看一下錯誤提示,看看是哪種錯誤,比較常見的是讀取超時,這種情況大家可以通過一些方法來盡量的避免或者解決。
    2009-07-07
  • php foreach正序倒序輸出示例代碼

    php foreach正序倒序輸出示例代碼

    這篇文章主要介紹了php中foreach正序輸出與倒序輸出的例子,php foreach用法實例,需要的朋友可以參考下
    2014-07-07
  • 詳解PHP 二維數(shù)組排序保持鍵名不變

    詳解PHP 二維數(shù)組排序保持鍵名不變

    這篇文章主要介紹了如何保持PHP 二維數(shù)組排序鍵名不變,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 檢查php文件中是否含有bom的函數(shù)

    檢查php文件中是否含有bom的函數(shù)

    檢查php文件中是否含有bom的函數(shù)代碼,需要的朋友可以參考下
    2012-05-05
  • PHP實現(xiàn)文件分片上傳的實例代碼

    PHP實現(xiàn)文件分片上傳的實例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于PHP實現(xiàn)文件分片上傳的實例代碼內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2020-01-01
  • 詳解PHP使用非對稱加密算法RSA

    詳解PHP使用非對稱加密算法RSA

    這篇文章主要介紹了PHP使用非對稱加密算法RSA,對算法感興趣的同學(xué),一定要看一下
    2021-04-04
  • php類常量的使用詳解

    php類常量的使用詳解

    本篇文章是對php中類常量的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php讀取數(shù)據(jù)庫信息的幾種方法

    php讀取數(shù)據(jù)庫信息的幾種方法

    連接到一個 url 地址為localhost 、 端口為 3306 的mysql服務(wù)器上。mysql服務(wù)器的帳號是"root",密碼是"9999"。mysql 服務(wù)器上有一個數(shù)據(jù)庫 ok , 數(shù)據(jù)庫里有一個表 abc。表 abc 一共為兩列,列名分別是 "id" 和 "name" ,將 abc 里的所有數(shù)據(jù)讀出來。
    2008-05-05
  • php使用preg_match()函數(shù)驗證ip地址的方法

    php使用preg_match()函數(shù)驗證ip地址的方法

    這篇文章主要介紹了php使用preg_match()函數(shù)驗證ip地址的方法,涉及php針對數(shù)字及字符串的正則匹配操作相關(guān)技巧,需要的朋友可以參考下
    2017-01-01
  • 處理(php-cgi.exe?-?FastCGI?進(jìn)程超過了配置的請求超時時限)的問題

    處理(php-cgi.exe?-?FastCGI?進(jìn)程超過了配置的請求超時時限)的問題

    本篇文章是對解決(php-cgi.exe?-?FastCGI?進(jìn)程超過了配置的請求超時時限)的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07

最新評論

通山县| 桂林市| 两当县| 尤溪县| 宁乡县| 常宁市| 许昌市| 河津市| 当涂县| 达尔| 通河县| 滨海县| 咸宁市| 剑阁县| 镇平县| 冕宁县| 宿迁市| 星座| 左权县| 新化县| 安义县| 昌图县| 贞丰县| 娄烦县| 神农架林区| 东乌珠穆沁旗| 万荣县| 襄城县| 澄城县| 平阳县| 岫岩| 怀宁县| 衡阳市| 志丹县| 昌吉市| 彭州市| 闻喜县| 修水县| 上林县| 信宜市| 仙桃市|