phpcurl数据解析 php解析接口

解析php中curlphpphpcurl数据解析的multi_curl功能慎用 因为某些版本的curl和php的搭配有Bug 所以phpcurl数据解析你调试过没问题的代码很可能在别的机器上不正确
相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已 它们文档少 给的例子 更是简单的让你无从借鉴 我也曾经找了许多网页 都没见一个完整的应用例子 ?curl_multi_add_handle ?curl_multi_close ?curl_multi_exec ?curl_multi_getcontent ?curl_multi_info_read ?curl_multi_init ?curl_multi_remove_handle ?curl_multi_select 一般来说 想到要用这些函数时 目的显然应该是要同时请求多个url 而不是一个一个依次请求 否则不如自己循环去调curl_exec好了
步骤总结如下第一步 调用curl_multi_init 第二步 循环调用curl_multi_add_handle 这一步需要注意的是 curl_multi_add_handle的第二个参数是由curl_init而来的子handle 第三步 持续调用curl_multi_exec 第四步 根据需要循环调用curl_multi_getcontent获取结果 第五步 调用curl_multi_remove_handle 并为每个字handle调用curl_close 第六步 调用curl_multi_close 这里有一个网上找的简单例子 其作者称为dirty的例子 (稍后我会说明为何dirty)
复制代码代码如下: * Here s a quick and dirty example for curl multi from PHP tested on PHP RC CLI / FreeBSD */
$connomains = array( " " " );
$mh = curl_multi_init();
foreach ($connomains as $i = $url) {$conn[$i]=curl_init($url);curl_setopt($conn[$i] CURLOPT_RETURNTRANSFER );curl_multi_add_handle ($mh $conn[$i]); }
do { $n=curl_multi_exec($mh $active); } while ($active);
foreach ($connomains as $i = $url) {$res[$i]=curl_multi_getcontent($conn[$i]);curl_close($conn[$i]); }
print_r($res);
整个使用过程差不多就是这样 但是 这个简单代码有个致命弱点 就是在do循环的那段 在整个url请求期间是个死循环 它会轻易导致CPU占用 % 现在我们来改进它 这里要用到一个几乎没有任何文档的函数curl_multi_select了 虽然C的curl库对select有说明 但是 php里的接口和用法确与C中有不同把上面do的那段改成下面这样
复制代码代码如下: do {$mrc = curl_multi_exec($mh $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);while ($active and $mrc == CURLM_OK) {if (curl_multi_select($mh) != ) {do {$mrc = curl_multi_exec($mh $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}}
因 为$active要等全部url数据接受完毕才变成false 所以这里用到了curl_multi_exec的返回值判断是否还有数据 当有数据的时候 就不停调用curl_multi_exec 暂时没有数据就进入select阶段 新数据一来就可以被唤醒继续执行 这里的好处就是CPU的无谓消耗没有 了
另外 还有一些细节的地方可能有时候要遇到控制每一个请求的超时时间 在curl_multi_add_handle之前通过curl_setopt去做curl_setopt($ch CURLOPT_TIMEOUT $timeout);
判断是否超时了或者其phpcurl数据解析他错误 在curl_multi_getcontent之前用 curl_error($conn[$i]);
lishixinzhi/Article/program/PHP/201311/21124
php curl中CURLOPT_HTTPHEADER 这个参数的含义php curl中CURLOPT_HTTPHEADER 这个参数的含义是:CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组 。Content-Type 表示后面的文档属于什么MIME类型 。charset表示浏览器可接受的字符集 。
HTTP头Servlet默认为text/plain,但通常需要显式地指定为text/html 。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType 。
HTTP请求头的部分类型:
1、Accept:浏览器可接受的MIME类型 。
2、Accept-Charset:浏览器可接受的字符集 。
3、Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip 。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面 。许多情形下这可以减少5到10倍的下载时间 。
4、Connection:表示是否需要持久连接 。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间 。
5、Content-Length:表示请求消息正文的长度 。
6、Cookie:这是最重要的请求头信息之一 。
扩展资料:
PHP中的CURL函数库(部分):
1、curl_setopt_array — 为cURL传输会话批量设置选项
2、curl_setopt — 设置一个cURL传输选项
3、curl_close — 关闭一个cURL会话
4、curl_copy_handle — 复制一个cURL句柄和它的所有选项
5、curl_errno — 返回最后一次的错误号
6、curl_error — 返回一个保护当前会话最近一次错误的字符串
7、curl_escape — 使用 URL 编码给定的字符串
在实际的使用当中,使用得最多的函数是curl_setopt — 设置一个cURL传输选项说明:bool curl_setopt ( resource $ch , int $option , mixed $value )其中,ch 由 curl_init() 返回的 cURL 句柄 。option 表示的是需要设置的CURLOPT_XXX选项 。
option的可选参数:
1、CURLOPT_BUFFERSIZE 每次获取的数据中读入缓存的大?。?但是不保证这个值每次都会被填满 。在cURL 7.10中被加入 。
2、CURLOPT_CLOSEPOLICY 不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY_,但是cURL暂时还不支持 。
3、CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间 , 如果设置为0 , 则无限等待 。
参考资料来源:百度百科-http请求头
参考资料来源:百度百科-curl
PHP中CURL方法curl_setopt()函数的参数详解PHP CURL curl_setopt 参数
boolcurl_setopt(int ch, string option, mixed value)
curl_setopt()函数将为一个CURL会话设置选项 。option参数是你想要的设置,value是这个选项给定的值 。
下列选项的值将被作为长整形使用(在option参数中指定):
下列选项的值将被作为字符串:
PHP用curl函数,抓取网页数据 , 数据里面的时间戳不能正常显示,显示为float(1.482130583E 12)原因在于:PHP 数字超过一定长度时,会自动转换为 科学计数法 的形式 。
可以用PHP函数 number_format() 来格式化数字,参考代码如下:
?php
$num = number_format(1.2313223123423E 017,'','','');
echo $num; //输出“123132231234230000”
?
PHP curl获取的远程数据,json_decode后返回空尝试一下把输出文件定义为 json 文件 。
header("Cache-Control: private");
header("Content-type: application/json; charset=utf-8");
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、输出数据 。
感谢阅读 , 希望能帮助到大家,谢谢大家对本站的支持!
【phpcurl数据解析 php解析接口】关于phpcurl数据解析和php解析接口的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读