php中curl的使用

来源:互联网 发布:奶茶店销售额大数据 编辑:程序博客网 时间:2024/05/22 14:09

一:php使用curl下载网页的例子:

<?php  $curl=curl_init("http://www.baidu.com");  curl_setopt($curl,CURLOPT_HEADER,1);  //若第三个参数设置为false,则抓取的内容会直接在网页上输出,否则抓取的内容能被接收-->后续可存为文件,处理字符串等。  curl_setopt($curl,CURLOPT_RETURNTRANSFER,false);  $file=fopen('/tmp/pricelog','a+');  $res=curl_setopt($curl,CURLOPT_FILE,$file);  $data=curl_exec($curl);  curl_close($curl); ?>
经测试,在Apache或Nginx开启时,用浏览器下面的脚本发送请求,上面的脚本在收到post请求后,会将请求中的数据写入文件中。

二:下面来看一个使用curl发送post请求的例子:

在使用curl发送post请求之前,先要有一个页面来接收post请求:

本文仅作实例,未采用虚拟主机,也未使用MVC模型,只用一个简单的页面来接受POST请求。

<?phpif (!empty($_POST)){    file_put_contents('/tmp/pricelog','POST的内容为'.json_encode($_POST).PHP_EOL,FILE_APPEND);}else{    file_put_contents('/tmp/pricelog','POST的内容为空'.PHP_EOL,FILE_APPEND);}//接收端的返回值采取echo的形式,直接return无效echo "this is POST return value";?>

接下来看发送的过程:

<?php$curl=curl_init("http://localhost/curlrecvpost.php");curl_setopt($curl,CURLOPT_HEADER,false);//CURLOPT_RETURNTRANSFER被设置为1能获取返回值,//若不设置,默认为0.且服务端的返回值会直接显示在浏览器中,接收端只能收到一个bool值来指示curl_exec是否被顺利执行curl_setopt($curl,CURLOPT_RETURNTRANSFER,0);$arr=array(1,2,3,4);curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$arr);$res=curl_exec($curl);curl_close($curl);var_dump($res);?>


三:一个使用curl上传文件的例子。发送端文件上传代码:

<?php$curl=curl_init("http://localhost/curlrecvpost.php");$file = array("upload_source"=>"@".dirname(__FILE__).'/upload_source.txt');curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$file);$res=curl_exec($curl);curl_close($curl);?>

接下来是接收端对上传文件的处理:

<?phpif ($_FILES){    file_put_contents('/tmp/pricelog','有文件被上传'.PHP_EOL,FILE_APPEND);    $tmp=$_FILES['upload_source']['tmp_name'];    $name=$_FILES['upload_source']['name'];    if(move_uploaded_file($_FILES['upload_source']['tmp_name'],dirname(__FILE__).'/upload/'.$name))    {        file_put_contents('/tmp/pricelog','上传成功'.PHP_EOL,FILE_APPEND);    }}else{    file_put_contents('/tmp/pricelog','没有文件被上传'.PHP_EOL,FILE_APPEND);}?>

 四:如何获取curl连接的信息:

$curl=curl_init("http://www.weibo.com/");curl_setopt($curl,CURLOPT_HEADER,false);curl_setopt($curl,CURLOPT_GET,true);$res=curl_exec($curl);if (!curl_error($curl)){    //如果没出错则打印连接的信息    var_dump(curl_getinfo($curl));}else{    //出错打印错误信息    var_dump(curl_error($curl));}

在curl操作成功后,调用curl_getinfo会返回一个数组,包含很多有用的信息。从中可获取网络速度,远程主机ip,重定向地址等许多有用的信息。

在发生错误的情况下调用curl_error函数可得到具体的出错信息。

curl比较常用。本文也在持续更新中。


(5)使用curl发送post请求并下载文件。

开发过程中,后端工程师需要对自己的代码进行单元测试,假设有这样的场景:

后端根据收到的数据动态生成pdf,由浏览器下载保存。在测试的时候,我们可以想到自己写一个页面中发POST请求。(注意:此处不能使用ajax,因为其返回的是字符串)显然用curl会更简单。几行代码就解决了,也不需要写新的请求页面。代码如下:

function postGetFile($url,$data){    $curl=curl_init($url);    //必须为true,否则返回的数据无法以文件的形式保存。    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);    curl_setopt($curl,CURLOPT_POST,true);    //如果post的数据中含有数组的话,必须使用http_build_query对其编码    curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($data));    $ret=curl_exec($curl);    file_put_contents("tmp.pdf",$ret);    curl_close($curl);}

方便简单,在命令行中新建个php文件就能使用了。 →_→...













0 0
原创粉丝点击