php抓取curl数据 php获取url内容

php获取数据为什么curl获取不完整

因为,PHP CURL库默认1024字节的长度不等待数据的返回,所以你那段代码需增加一项配置:

创新互联公司专注于企业营销型网站建设、网站重做改版、梁平网站定制设计、自适应品牌网站建设、H5建站购物商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为梁平等各大城市提供网站开发制作服务。

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

给你一个更全面的封装方法:

function req_curl($url, $status = null, $options = array())

{

$res = '';

$options = array_merge(array(

'follow_local' = true,

'timeout' = 30,

'max_redirects' = 4,

'binary_transfer' = false,

'include_header' = false,

'no_body' = false,

'cookie_location' = dirname(__FILE__) . '/cookie',

'useragent' = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1',

'post' = array() ,

'referer' = null,

'ssl_verifypeer' = 0,

'ssl_verifyhost' = 0,

'headers' = array(

'Expect:'

) ,

'auth_name' = '',

'auth_pass' = '',

'session' = false

) , $options);

$options['url'] = $url;

$s = curl_init();

if (!$s) return false;

curl_setopt($s, CURLOPT_URL, $options['url']);

curl_setopt($s, CURLOPT_HTTPHEADER, $options['headers']);

curl_setopt($s, CURLOPT_SSL_VERIFYPEER, $options['ssl_verifypeer']);

curl_setopt($s, CURLOPT_SSL_VERIFYHOST, $options['ssl_verifyhost']);

curl_setopt($s, CURLOPT_TIMEOUT, $options['timeout']);

curl_setopt($s, CURLOPT_MAXREDIRS, $options['max_redirects']);

curl_setopt($s, CURLOPT_RETURNTRANSFER, true);

curl_setopt($s, CURLOPT_FOLLOWLOCATION, $options['follow_local']);

curl_setopt($s, CURLOPT_COOKIEJAR, $options['cookie_location']);

curl_setopt($s, CURLOPT_COOKIEFILE, $options['cookie_location']);

if (!empty($options['auth_name']) is_string($options['auth_name']))

{

curl_setopt($s, CURLOPT_USERPWD, $options['auth_name'] . ':' . $options['auth_pass']);

}

if (!empty($options['post']))

{

curl_setopt($s, CURLOPT_POST, true);

curl_setopt($s, CURLOPT_POSTFIELDS, $options['post']);

//curl_setopt($s, CURLOPT_POSTFIELDS, array('username' = 'aeon', 'password' = '111111'));

}

if ($options['include_header'])

{

curl_setopt($s, CURLOPT_HEADER, true);

}

if ($options['no_body'])

{

curl_setopt($s, CURLOPT_NOBODY, true);

}

if ($options['session'])

{

curl_setopt($s, CURLOPT_COOKIESESSION, true);

curl_setopt($s, CURLOPT_COOKIE, $options['session']);

}

curl_setopt($s, CURLOPT_USERAGENT, $options['useragent']);

curl_setopt($s, CURLOPT_REFERER, $options['referer']);

$res = curl_exec($s);

$status = curl_getinfo($s, CURLINFO_HTTP_CODE);

curl_close($s);

return $res;

}

php curl 模拟登录并获取数据实例详解

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录

function

login_post($url,

$cookie,

$post)

{

$curl

=

curl_init();//初始化curl模块

curl_setopt($curl,

CURLOPT_URL,

$url);//登录提交的地址

curl_setopt($curl,

CURLOPT_HEADER,

0);//是否显示头信息

curl_setopt($curl,

CURLOPT_RETURNTRANSFER,

0);//是否自动显示返回的信息

curl_setopt($curl,

CURLOPT_COOKIEJAR,

$cookie);

//设置Cookie信息保存在指定的文件中

curl_setopt($curl,

CURLOPT_POST,

1);//post方式提交

curl_setopt($curl,

CURLOPT_POSTFIELDS,

http_build_query($post));//要提交的信息

curl_exec($curl);//执行cURL

curl_close($curl);//关闭cURL资源,并且释放系统资源

}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据

function

get_content($url,

$cookie)

{

$ch

=

curl_init();

curl_setopt($ch,

CURLOPT_URL,

$url);

curl_setopt($ch,

CURLOPT_HEADER,

0);

curl_setopt($ch,

CURLOPT_RETURNTRANSFER,

1);

curl_setopt($ch,

CURLOPT_COOKIEFILE,

$cookie);

//读取cookie

$rs

=

curl_exec($ch);

//执行cURL抓取页面内容

curl_close($ch);

return

$rs;

}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据

$post

=

array

(

'email'

=

'oschina账户',

'pwd'

=

'oschina密码',

'goto_page'

=

'/my',

'error_page'

=

'/login',

'save_login'

=

'1',

'submit'

=

'现在登录'

);

//登录地址

$url

=

"";

//设置cookie保存路径

$cookie

=

dirname(__FILE__)

.

'/cookie_oschina.txt';

//登录后要获取信息的地址

$url2

=

"";

//模拟登录

login_post($url,

$cookie,

$post);

//获取登录页的信息

$content

=

get_content($url2,

$cookie);

//删除cookie文件

@

unlink($cookie);

//匹配页面信息

$preg

=

"/td

class='portrait'(.*)\/td/i";

preg_match_all($preg,

$content,

$arr);

$str

=

$arr[1][0];

//输出内容

echo

$str;

使用总结

1、初始化curl;

2、使用curl_setopt设置目标url,和其他选项;

3、curl_exec,执行curl;

4、执行后,关闭curl;

5、输出数据。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如何在php中获取curl请求的请求头信息及相应头信息

获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。

获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。


本文标题:php抓取curl数据 php获取url内容
文章位置:http://azwzsj.com/article/ddsijpj.html