PHP curl 或 file_get_contents 获取需要授权页面的方法

2018-09-07 17:15

阅读:265

  今天因工作需要,需要用 curl / file_get_contents 获取需要授权(Authorization)的页面内容,解决后写了这篇文章分享给大家。

  PHP curl 扩展,能够在服务器端发起POST/GET请求,访问页面,并能获取页面的返回数据。

  例如要获取的页面:

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

  使用curl获取server.php页面

   <?php $url =

  如果服务没有安装php curl扩展,使用file_get_contents也可以实现发起请求,获取页面返回数据

   <?php $url =

  使用curl 和 file_get_contents 返回的结果都是一样的。

   Array ( [content] => fdipzone blog )

  对于需要授权的页面,例如使用了htpasswd+.htaccess设置目录访问权限的页面,直接用上面的方法会返回401 Unauthorized错误。

  这次的例子先不使用htpasswd+.htaccess来控制访问权限,而使用 $_SERVER[PHP_AUTH_USER] 和 $_SERVER[PHP_AUTH_PW]这两个服务器参数。

   修改为:

   <?php if(!isset($_SERVER[PHP_AUTH_USER])) { header(

  设定帐号:fdipzone 密码:654321

  curl中,有一个参数是 CURLOPT_USERPWD,我们可以利用这个参数把帐号密码在请求时发送过去。

  curl_setopt($ch, CURLOPT_USERPWD, 帐号:密码);

  curl请求的程序修改为:

   <?php $url = 加入这句 $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 如果要发送帐号和密码,需要手动拼接header

  file_get_contents 请求的程序修改为:

   <?php $url = 加入这句 $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; } ?>

  源码下载地址:点击查看

  以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!


评论


亲,登录后才可以留言!