新京葡娱乐场网址:PHP curl 或 file_get_contents 获取需要授权页面的方法_php技巧_脚本之家

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

是把PHP的主页取回放到一个文件中。

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

例 1. 使用PHP的CURL模块取回PHP主页

例如要获取的页面:

 代码如下

使用curl获取server.php页面

<?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,
"");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//如果把这行注释掉的话,就会直接输出
 $result=curl_exec($ch);
 curl_close($ch);

'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; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $ret = curl_exec; $retinfo = curl_getinfo; if($retinfo['http_code']==200){ $data = json_decode; print_r; }else{ echo 'POST Fail'; } ?> 

2,使用代理进行抓取

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

为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。google对你的ip地址做限制这个时候,你可以换代理重新抓。

'fdipzone blog'); $opt = array( 'http' => array( 'method' => 'POST', 'header' => 'content-type:application/x-www-form-urlencoded', 'content' => http_build_query; $context = stream_context_create; $ret = file_get_contents($url, false, $context); if{ $data = json_decode; print_r; }else{ echo 'POST Fail'; } ?> 

 

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

 代码如下

Array ( [content] => fdipzone blog ) 

<?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
 curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);
 //url_setopt($ch, CURLOPT_PROXYUSERPWD,
'user:password');如果要密码的话,加上这个
 $result=curl_exec($ch);
 curl_close($ch);
 ?>

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

3,post数据后,抓取数据

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

单独说一下数据提交数据,因为用
curl的时候,很多时候会有数据交互的,所以比较重要的。

修改为:

 代码如下

设定帐号:fdipzone 密码:654321

<?php
 $ch = curl_init();
 /*在这里需要注意的是,要提交的数据不能是二维数组或者更高
 *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')
 *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/
 $data = array('name' => 'test',
'sex'=>1,'birth'=>'20101010');
 curl_setopt($ch, CURLOPT_URL,
'');
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_exec($ch);
 ?>在
upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array
( [name] => test [sex] => 1 [birth] => 20101010 )

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

4,抓取一些有页面访问控制的页面

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

新京葡娱乐场网址 1

curl请求的程序修改为:

页面访问控制的3种方法

'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; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, 'fdipzone:654321'); // 加入这句 $ret = curl_exec; $retinfo = curl_getinfo; if($retinfo['http_code']==200){ $data = json_decode; print_r; }else{ echo 'POST Fail'; } ?> 

页面访问控制的3种方法张映 发表于 2010-10-12

而file_get_contents 如果要发送帐号和密码,需要手动拼接header

分类目录: apache/nginx
我们经常会看到这种现象,看下图

file_get_contents 请求的程序修改为:

apache 页面访问控制
为什么要进行这样的控制呢,给不同的人看不同的东西,对信息进行保护,虽然这种保护比较低级,多多少少还是有点用的。

'fdipzone blog'); $auth = sprintf('Authorization: Basic %s', base64_encode; // 加入这句 $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; $context = stream_context_create; $ret = file_get_contents($url, false, $context); if{ $data = json_decode; print_r; }else{ echo 'POST Fail'; } ?> 

一,用htpasswd命令,产生权限控制文件

源码下载地址:点击查看

 代码如下

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

查看复制打印?
1.[zhangy@BlackGhost test]$ htpasswd -c ./access tank 
//生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看  
2.New password:            //提示输入密码  
3.Re-type new password:        //重复密码  
4.Adding password for user tank  
5.[zhangy@BlackGhost test]$ cat access    //查看一下密码文件  
6.tank:Uj5B3qIF/BNdI      //用户名是明文的,密码是加密的。 
[zhangy@BlackGhost test]$ htpasswd -c ./access tank 
//生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看
New password:            //提示输入密码
Re-type new password:        //重复密码
Adding password for user tank
[zhangy@BlackGhost test]$ cat access    //查看一下密码文件
tank:Uj5B3qIF/BNdI     
//用户名是明文的,密码是加密的。到这儿密码文件是生成好了。

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。