php中使用cURL发送请求、上传图片以及批处理的实现方法
来源:转载
发布时间:2018-10-15 15:13:01
阅读量:720
本篇文章给大家带来的内容是关于php中使用cURL发送请求、上传图片以及批处理的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
cURL是利用url语法规定传输文件和数据的工具。php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传。
在php中建立curl的基本步骤如下:
1.初始化
2. 设置选项,包括url
3. 执行并获取结果
4. 释放curl句柄。
在工作和学习中,我也是时常用的curl。由于在使用curl设置选项时,各种选项比较难以记忆,需要参考,故在此记录下常用的一些例子,以便后来参考。
实例一 : 抓取网页数据(以拉手网开放api为例,也是get请求)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php
header( "Content-type: text/html; charset=utf-8" );
$ch = curl_init();
curl_setopt( $ch , CURLOPT_URL, "http://open.lashou.com/opendeals/lashou/city.xml" );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec( $ch );
curl_close( $ch );
echo $html
|
如果用这种方法发get请求,参数附加到url后面即可,如curl_setopt($ch, CURLOPT_URL, "http://localhost/tqj/date/p822.php?name=yyyyy");
实例二: 利用curl发送post请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php
$uri = "http://localhost/tqj/date/p822.php" ;
$data = array (
'name' => 'tianquanjun' ,
'password' => 'tianquanjun' ,
);
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL, $uri );
curl_setopt ( $ch , CURLOPT_POST, 1 );
curl_setopt ( $ch , CURLOPT_HEADER, 0 );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
curl_close ( $ch );
print_r( $return );
|
实例三 :curl 过程调试与错误信息处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php
$uri = "http://localhost/tqj/date/p822.php" ;
$data = array (
'name' => 'tianquanjun' ,
'password' => 'tianquanjun' ,
);
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL, $uri );
curl_setopt ( $ch , CURLOPT_POST, 1 );
curl_setopt ( $ch , CURLOPT_HEADER, 0 );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
if ( $return === false){
var_dump(curl_error( $ch ));
}
$info = curl_getinfo( $ch );
echo "执行时间" . $info [ 'total_time' ].PHP_EOL;
curl_close ( $ch );
print_r( $return );
?>
|
其中利用curl_error()获取错误信息,curl_getinfo()获取运行相关信息。
实例四: 上传图片,获取返回信息。
跨域上传图片,同时获取返回信息,这个就能大显身手。和post比较像,注意文件之前加一个@符号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php
$uri = "http://localhost/tqj/date/p822.php" ;
$data = array (
'author' => 'tianquanjun' ,
'upload' => '@C:\Users\tianquanjun.DANGDANG\Pictures\a.jpg' ,
);
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL, $uri );
curl_setopt ( $ch , CURLOPT_POST, 1 );
curl_setopt ( $ch , CURLOPT_HEADER, 0 );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
if ( $return === false){
var_dump(curl_error( $ch ));
}
$info = curl_getinfo( $ch );
echo "执行时间" . $info [ 'total_time' ].PHP_EOL;
curl_close ( $ch );
print_r( $return );
|
实例五 : curl批处理。
curl有一个高级特性,批处理句柄。允许打开多个curl链接。
批处理就是打开多个curl句柄,并把这些句柄指派给一个批处理句柄,然后在while循环里等待处理完毕。curl_multi_exec()算是称得上多线程处理,不过它还是属于异步的范畴。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php
header( "Content-type: text/html; charset=gbk" );
$urls = array ( 'http://www.baidu.com' , 'http://www.qq.com/' );
$ch = array ();
$mh =curl_multi_init();
$ch [0]=curl_init( $urls [0]);
$ch [1]=curl_init( $urls [1]);
for ( $i =0; $i <2; $i ++)
{
curl_setopt( $ch [ $i ],CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle( $mh , $ch [ $i ]);
}
$running = NULL;
do {
usleep(10000);
curl_multi_exec( $mh , $running );
} while ( $running >0);
$res = array ();
for ( $j =0; $j <2; $j ++)
{
$res [ $j ]=curl_multi_getcontent( $ch [ $j ]);
}
for ( $k =0; $k <2; $k ++)
{
curl_multi_remove_handle( $mh , $ch [ $k ]);
}
curl_multi_close( $mh );
print_r( $res );
?>
|