您的位置:首页 > 编程语言 > PHP开发

php curl抓取页面几种方法介绍

2014-11-11 14:51 239 查看


php curl 抓取页面几种方法介绍

来源: 时间:2013-09-05 19:26:44 阅读数:11627

分享到:0

[导读] curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。 是把PHP的主

curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。

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

例 1. 使用PHP的CURL模块取回PHP主页
代码如下复制代码
<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出

$result=curl_exec($ch);

curl_close($ch);
2,使用代理进行抓取

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

代码如下复制代码
<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.hzhuti.com");

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);

?>
3,post数据后,抓取数据

单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的。
代码如下复制代码
<?php

$ch = curl_init();

$data = '<xml>

<appid></appid>

<attach>支付测试</attach>

<body>APP支付测试</body>

<mch_id></mch_id>

<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>

<notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url>

<out_trade_no>1415659990</out_trade_no>

<spbill_create_ip>14.23.150.211</spbill_create_ip>

<total_fee>1</total_fee>

<trade_type>APP</trade_type>

<sign>0CB01533B8C1EF103065174F50BCA001</sign>

</xml> ';

curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/pay/unifiedorder');

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //相当关键,这句话是让curl_exec($ch)返回的结果可以进行赋值给其他的变量进行,json的数据操作,如果没有这句话,则curl返回的数据不可以进行人为的去操作(如json_decode等格式操作)

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //设置审核的强弱

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //设置审核的强弱

$result=curl_exec($ch);

dump($result);
4,抓取一些有页面访问控制的页面



页面访问控制的3种方法

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

分类目录: apache/nginx

我们经常会看到这种现象,看下图

apache 页面访问控制

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

一,用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 //用户名是明文的,密码是加密的。到这儿密码文件是生成好了。
二,页面访问控制方法

1,能过修改httpd.conf或者是httpd-vhosts.conf来进行配置

代码如下复制代码
listen 10004

NameVirtualHost *:10004

<VirtualHost *:10004>

DocumentRoot "/home/zhangy/www/test"

ServerName *:10004

BandwidthModule On

ForceBandWidthModule On

Bandwidth all 1024000

MinBandwidth all 50000

LargeFileLimit * 500 50000

MaxConnection all 2

ErrorLog "/home/zhangy/apache/blog.51yip.com.com-error.log"

CustomLog "/home/zhangy/apache/blog.51yip.com-access.log" common

//看一下,下面的配置

<Directory /home/zhangy/www/test>

AuthType Basic

AuthName "access test"

AuthUserFile /home/zhangy/www/test/access

Require valid-user

</Directory>

</VirtualHost>
2,我们可以利用.htaccess文件来进行控制

在test的根目录下面建一个.htaccess的文件
代码如下复制代码
[zhangy@BlackGhost test]$ vi .htaccess   //打开个文件 ,添加权限内容

[zhangy@BlackGhost test]$ cat .htaccess  //下面就是.htaccess的内容

AuthType Basic

AuthName "access test"

AuthUserFile /home/zhangy/www/test/access

Require valid-user
3,不用密码文件,也可以进行访问控制
代码如下复制代码
define('ADMIN_USERNAME','tank');     // Admin Username

define('ADMIN_PASSWORD','tank');      // Admin Password

//log check

if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||

$_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||$_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {

Header("WWW-Authenticate: Basic realm="access test"");

Header("HTTP/1.0 401 Unauthorized");

echo <<<EOB

<html><body>

<h1>Rejected!</h1>

<big>Wrong Username or Password!</big>

</body></html>

EOB;

exit;

}
curl相关函数列表:

curl_init — 初始化一个CURL会话

curl_setopt — 为CURL调用设置一个选项

curl_exec — 执行一个CURL会话

curl_close — 关闭一个CURL会话

curl_version — 返回当前CURL版本

curl_init — 初始化一个CURL会话

描述

int curl_init ([string url])

curl_init()函数将初始化一个新的会话,返回一个CURL句柄供 curl_setopt(), curl_exec(),和 curl_close() 函数使用。如果可选参数被提供,那么CURLOPT_URL选项将被设置成这个参数的值。你可以使用curl_setopt()函数人工设置。

例 1. 初始化一个新的CURL会话,且取回一个网页
代码如下复制代码
$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL, “http://www.zend.com/”);

curl_setopt ($ch, CURLOPT_HEADER, 0);

curl_exec ($ch);

curl_close ($ch);

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: