php返回curl数据 php post返回数据

解析php中curlphp的multi_curl功能慎用 因为某些版本的curl和php的搭配有Bug 所以你调试过没问题的代码很可能在别的机器上不正确
相信许多人对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);
判断是否超时了或者其他错误 在curl_multi_getcontent之前用 curl_error($conn[$i]);
lishixinzhi/Article/program/PHP/201311/21124
php curl 返回空一、使用curl调用远程PHP文件来获取相应数据
二、问题
调用远程php返回curl数据的PHP文件后,print_r($result)死活打印不出来东西 。
三、解决
原来是自己在远程PHP文件中使用php返回curl数据了return返回json数据php返回curl数据,改为了echo 后就可以了
害php返回curl数据我浪费了几个小时时间 , 记录一下 。
php 使用curl函数并附带参数传递,接收返回的数据并保存在变量中$Data = https://www.04ip.com/post/array('user' = 'xiaoming');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $Data);
$a = curl_exec($ch);
curl_close($ch);
print_r( $a );
php 中 怎么让curl_exec 以数组形式返回可以将他返回的内容赋值给一个
变量
。只需再
前面
加上,curl_setopt($ch,CUROPT_RETURNTRANSFER,1);就可以将返回结果赋值给变量了 。比如,$r=curl_exec($ch);这时返回的结果全部包含再$r中,想
什么时候
输出什么时候输出 , 如果不准备要他的结果,那么就将前面的1换成0
php 中 怎么让curl_exec 以数组形式返回可以先看看PHP中的 curl_exec函数的说明
(PHP 4 = 4.0.2, PHP 5)
curl_exec — 执行一个cURL会话
说明
mixed curl_exec ( resource $ch )
执行给定的cURL会话 。
这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用 。
参数
ch
由 curl_init() 返回的 cURL 句柄 。
返回值
成功时返回 TRUE , 或者在失败时返回 FALSE 。然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE。
我前两天刚好用到过的两种情况
//从返回结果中获取指定的值
$res=curl_exec($ch);
$pa = '\ul class="ul1"li本站主数据:(.*?)/li%si';
preg_match($pa,$res,$r);
return$r[1];
//第二种 的返回结果是以json形式 。
$res=json_decode(curl_exec($ch),true);
print_r($res);
在 php curl返回给你个我写的curl方法 。
/**
* curl模拟提交
* @param string$url网址
* @param array/string $opt提交参数
* @param string$header 取回的头信息
* @param string$redirect 是否重定向
* @param boolean$ssl验证https证书
* @return [type]返回信息
*/
function curl($url, $opt='GET', $header=null, $redirect=true, $ssl=false){
//初始化
$ch = curl_init($url);
//配置设置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $ssl);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $ssl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $redirect);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);#返回结果
curl_setopt($ch, CURLOPT_HEADER, true);#显示协议头
if(is_array($opt)){
//转小写
$opt = array_change_key_case($opt, CASE_LOWER);
//POST
if(isset($opt['type'])strtoupper($opt['type'])=='POST'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, (isset($opt['data']) ? $opt['data'] : ''));
}
//User-Agent
if(array_key_exists('ua', $opt))
curl_setopt($ch, CURLOPT_USERAGENT, $opt['ua']);
//Header
if(array_key_exists('header', $opt)){
curl_setopt($ch, CURLOPT_HTTPHEADER, (array)$opt['header']);
}
//Cookie
if(array_key_exists('cookie', $opt))
curl_setopt($ch, CURLOPT_COOKIE, $opt['cookie']);
//Referer
if(array_key_exists('referer', $opt))
curl_setopt($ch, CURLOPT_REFERER, $opt['referer']);
}else{
//仅POST
if(strtoupper((string)$opt) == 'POST')
curl_setopt($ch, CURLOPT_POST, true);
}
$result = curl_exec($ch);
if(curl_errno($ch)){
$result = curl_error($ch);
}else{
//获取头长度
$length = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
//取出头信息
$header = substr($result, 0, $length);
//去掉头信息
$result = substr($result, $length);
}
//释放
curl_close($ch);
return $result;
}
【php返回curl数据 php post返回数据】关于php返回curl数据和php post返回数据的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读