• 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);
  • 相关阅读:
    设置css阴影和取消css阴影
    logback 中打印自定义参数 (ip 服务名)
    kafka
    用SQL命令查看Mysql数据库大小 统计数据库空间占用
    Redis删除特定前缀key的优雅实现
    SpringBoot外部配置以及优先级
    分析redis key大小的几种方法
    logback
    Redis 中 scan 命令踩坑
    如何在yaml文件中引用python函数? 上海
  • 原文地址:https://www.cnblogs.com/wgphp/p/7707917.html
Copyright © 2020-2023  润新知