php里用curl多频繁就不用多说了,之前每次都是复制粘贴,对很多选项也是一知半解,今天记录下。
curl默认是get请求。
判断php是否启用了curl:
extension_loaded('curl'); // 如果php没有启用curl模块,那么则会返回false
下面是一个非常简单的例子
- $ch = curl_init(); // 创建一个curl资源
- url_setopt($ch, CURLOPT_URL, 'https://www.baidu.com'); // 设置访问的服务器,也可以设置在curl_init里
- curl_setopt($ch, CURLOPT_HEADER, 0); // 忽略头部信息,,否则会输出head信息,解析出错
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // 链接服务器超时时间,单位s
- curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置整个curl执行的最大时间
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 是否直接输出结果,或者保存到变量,一般都设置为1,默认0
- curl_setopt($ch, CURLOPT_POST, 1); // 默认get方式,post请求需要单独设置
- curl_setopt($ch, CURLOPT_POSTFIELDS,['name' => 'nciaer']); // post 传数据,直接传数组
- $rs = curl_exec($ch); // 执行
- var_dump($rs); // 打印输出的结果
- curl_close($ch); // 关闭curl
复制代码 一个设置就需要写一个curl_setopt,很麻烦,可以使用curl_setopt_array($ch, ['配置项' => '值', ...])来设置多个
如果想要json格式传输数据呢?那得改成下面这样:- $data = json_encode(['name' => 'nciaer']);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // json 传输
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($data))); // 设置header
复制代码
如果有证书问题,那么可以设置取消证书验证,一般都这么做,但是这么做似乎有啥安全问题:- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
复制代码
如何通过curl上传文件呢?- $data = [
- 'upload' => new CURLFile('data.txt') // data.txt就是上传的文件,upload类似于type=file里的name定义
- ];
- curl_setopt($ch, CURLOPT_POST, 1); // 默认get方式,post请求需要单独设置
- curl_setopt($ch, CURLOPT_POSTFIELDS,$data); // post 传数据,直接传数组
复制代码
如何通过curl下载文件呢?- $fp = fopen ('1.gif', 'w+');
- curl_setopt($ch, CURLOPT_FILE, $fp);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随跳转
复制代码 虽然直接保存$rs也能下载文件,但是那种遇到大文件会非常吃内存,记住,curl_close之后要执行fclose($fp)
有关PHP系统、Discuz或网站等各种问题,可以联系QQ1069971363寻求付费支持
|
|