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

PHP curl 扩展,能够在服务器端发起POST/GET请求,访问页面,并能获取页面的返回数据。
例如要获取的页面: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';
}
?>
如果服务没有安装php curl扩展,使用file_get_contents也可以实现发起请求,获取页面返回数据
<?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 返回的结果都是一样的。
Array ( [content] => fdipzone blog )
对于需要授权的页面,例如使用了htpasswd+.htaccess设置目录访问权限的页面,直接用上面的方法会返回401 Unauthorized错误。
这次的例子先不使用htpasswd+.htaccess来控制访问权限,而使用 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW']这两个服务器参数。
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));
?>
设定帐号:fdipzone 密码:654321
curl中,有一个参数是 CURLOPT_USERPWD,我们可以利用这个参数把帐号密码在请求时发送过去。
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 如果要发送帐号和密码,需要手动拼接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';
}
?>
源码下载地址:点击查看
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# curl获取授权页面
# file_get_contents获取授权页面
# PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
# PHP实现模拟http请求的方法分析
# PHP模拟http请求的方法详解
# php发送http请求的常用方法分析
# php实现的http请求封装示例
# PHP使用socket发送HTTP请求的方法
# php 利用socket发送HTTP请求(GET
# POST)
# PHP实现取得HTTP请求的原文
# PHP获取http请求的头信息实现步骤
# PHP使用file_get_contents发送http请求功能简单示例
# 帐号
# 这句
# 访问权限
# 下载地址
# 这两个
# 给大家
# 点击查看
# 写了
# 可以实现
# 这篇文章
# 并能
# 可以利用
# 需要用
# 有一个
# 没有安装
# 法会
# 使用了
# 是一样的
# echo
# json_encode
相关文章:
已有域名和空间如何快速搭建网站?
,如何利用word制作宣传手册?
建站主机是否等同于虚拟主机?
西安专业网站制作公司有哪些,陕西省建行官方网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
如何通过万网虚拟主机快速搭建网站?
淘宝制作网站有哪些,淘宝网官网主页?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何在新浪SAE免费搭建个人博客?
网站网页制作专业公司,怎样制作自己的网页?
香港网站服务器数量如何影响SEO优化效果?
建站168自助建站系统:快速模板定制与SEO优化指南
如何通过cPanel快速搭建网站?
宝塔建站助手安装配置与建站模板使用全流程解析
如何制作算命网站,怎么注册算命网站?
如何快速搭建自助建站会员专属系统?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
已有域名建站全流程解析:网站搭建步骤与建站工具选择
北京企业网站设计制作公司,北京铁路集团官方网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
黑客入侵网站服务器的常见手法有哪些?
高端云建站费用究竟需要多少预算?
如何规划企业建站流程的关键步骤?
移民网站制作流程,怎么看加拿大移民官网?
如何通过宝塔面板实现本地网站访问?
三星网站视频制作教程下载,三星w23网页如何全屏?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何通过虚拟主机快速搭建个人网站?
如何在万网自助建站平台快速创建网站?
临沂网站制作企业,临沂第三中学官方网站?
建站之星客服服务时间及联系方式如何?
宝塔面板创建网站无法访问?如何快速排查修复?
如何用花生壳三步快速搭建专属网站?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
家庭建站与云服务器建站,如何选择更优?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何在IIS中新建站点并配置端口与物理路径?
制作销售网站教学视频,销售网站有哪些?
建站之星代理费用多少?最新价格详情介绍
清除minerd进程的简单方法
建站之星如何快速生成多端适配网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
如何通过多用户协作模板快速搭建高效企业网站?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何快速选择适合个人网站的云服务器配置?
*请认真填写需求信息,我们会在24小时内与您取得联系。