php curl的正确使用方法

Posted 雅源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php curl的正确使用方法相关的知识,希望对你有一定的参考价值。

在做一个读取远程抓取数据并显示的demo的时候,遇到了以下几个问题:

1.用的curl变量进行了多定义

2.抓取远程数据时没有返回正确的json数据

没有返回正确的json数据不是因为网站提供的接口问题,而是因为

curl_setopt($ch, CURLOPT_HEADER, 1);

上面的这一行代码在网站数据只返回Json数据时会在Json数据上加入一些http头文件的信息,导致解析json数据错误

 

第一个问题在于我定义了多个$ch1、$ch2、$ch3等的curl变量,实际上是不需要的,以下的代码形式同样可以行得通:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output1=curl_exec($ch);
    //将$output1字符串从gbk,utf-8,ascii转化为utf-8
//        $rs = mb_convert_encoding($output1,‘utf-8‘,‘GBK,UTF-8,ASCII‘); //加上这行 
    curl_close($ch);
    
    //$ch可以重名
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://news.baidu.com/");
    //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //启动时会将头文件的信息作为数据流输出
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $output2=curl_exec($ch);
    curl_close($ch);
    
    dump($output2);

或者是,如下的形式,不必每次都初始化,而是初始化后,不断使用curl_setopt和curl_exec方法,最后的时候再关闭即可:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output1=curl_exec($ch);
    curl_setopt($ch, CURLOPT_URL, "http://news.baidu.com/");
    //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //启动时会将头文件的信息作为数据流输出
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $output2=curl_exec($ch);
    curl_close($ch);
    dump($output1);

 

以上是关于php curl的正确使用方法的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP中的curl发送请求

postman 自动生成 curl 代码片段

postman 自动生成 curl 代码片段

Paypal 使用 PHP cURL 获取交易详情

php 使用PHP以正确的编码修改HTML片段

解析php中curl