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的正确使用方法的更多相关文章
- thinkphp3.2 cli模式的正确使用方法
最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...
- Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法
Linux下Rsync+inotify-tools实现数据实时同步中有一个重要的配置就是设置Inotify的max_user_watches值,如果不设置,当遇到大量文件的时候就会出现出错的情况. 一 ...
- MyEclipse10的正确破解方法
无法转载,故给出原文链接,以供需要者. MyEclipse10的正确破解方法
- [转]MySQL忘记密码的正确解决方法
http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...
- webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包
随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...
- .Net core 下的ConfigurationManager类正确引用方法
大家在项目中经常会用到需要引用配置文件的情况,这也是我偶然间遇到的问题,菜鸟一枚,如有需纠正多谢指点. 正题 在不先引用using的情况下直接写 ConfigurationManager.AppSet ...
- SpringBoot 中 @RequestBody的正确使用方法
SpringBoot 中 @RequestBody的正确使用方法 最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法: @RequestMapping(&q ...
- CentOS正确关机方法(转)
CentOS正确关机方法 1关机前准备 1.1观察系统使用状态 · 谁在线:who · 联网状态:netstat -a · 后台执行的程序:ps -au ...
- windows server 2008 R2 的 FTP 防火墙的正确配置方法
存在问题 FTP搭建完成后,仅本机可以访问,其他机器无法访问. 解决方案 这时,将C:\Windows\System32\svchost.exe添加到例外即可正常访问,如下图所示.将20及21端口添加 ...
随机推荐
- android应用的资源
应用资源可以分为两大类: 1.无法直接访问的原生资源,保存在asset目录下. 2.可以通过R资源清单类访问的资源,保存在res目录下. 资源的类型以及存储方式: android要求在res目录下用不 ...
- $.extend() $.fn.extend()
(非原创)jQuery为开发插件提拱了两个方法,分别是:jQuery.fn.extend();jQuery.extend();虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便 ...
- Vue Router基础
路由 安装 vue-router 起步 <router-link to="/foo">Go to Foo</router-link> <router- ...
- SQL Server中配置ODBC数据源
单击“开始→windows系统→控制面板”,打开控制面板 单击“管理工具→ODBC数据源(32位)”打开ODBC数据源配置对话框 在数据源配置对话框中单击“系统DSN”选项卡下的“添加”按钮,创建数据 ...
- 2017-3-7html基础
一:<html><!--html文档的开始--> <head><!--头标签,html文档的开头,来描述html文档的信息,head之间的内容不会在浏览器中显 ...
- NX二次开发-UFUN拾取草图尺寸对话框UF_UI_select_sketch_dimensions
#include <uf.h> #include <uf_ui.h> #include <uf_sket.h> UF_initialize(); //拾取草图尺寸对 ...
- Spring-Security (学习记录二)--修改为自己的登录页面
目录 1.修改spring-security.xml配置文件 2.增加login.jsp页面 3.重启项目即可看到效果 1.修改spring-security.xml配置文件 <!-- auto ...
- word2vec中关于霍夫曼树的
再谈word2vec 标签: word2vec自然语言处理NLP深度学习语言模型 2014-05-28 17:17 16937人阅读 评论(7) 收藏 举报 分类: Felven在职场(86) ...
- RHEL / CentOS Linux Install Core Development Tools Automake, Gcc (C/C++), Perl, Python & Debuggers
how do I install all developer tools such as GNU GCC C/C++ compilers, make and others, after install ...
- Day15:Python 【模块】及__name__:
什么是模块: 在Python中,随着这代码的撰写,代码越来越长,所以产生了,模块这个概念,模块是什么?模块就是一个.py文件,在撰写代码时,我们把不同的功能的代码封装到一个.py文件里,用得时候导入 ...