官方文档curl : http://www.runoob.com/php/php-ref-curl.html

php开启curl : 

  ① 打开 php.ini 文件  extension=php_curl.dll  // 去掉前面的分号

② 检查php.ini的extension_dir值是哪个目录,检查该目录有无php_curl.dll,如果没有的请下载php_curl.dll

③ 再把php目录中的libeay32.dll,ssleay32.dll拷到c:\windows\system32里面

④ 重启下 apache或者iis即可。

  ⑤使用phpinfo()函数查看配置信息,查看curl是否开启; 或使用extension_loaded('curl')函数,返回布尔类型的值

  ⑥php 版本建议 5.6 以上,测试过 5.4+nginx 请求不到数据,原因暂且不知

curl  post 请求函数

function http_post($url, $data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}

curl get 请求函数

function http_get($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}

curl  get/post请求:

header("Content-type: text/html; charset=utf-8");
$url = 'https://www.baidu.com/';// 页面编码与php 执行页面编码一致
/** curl api 接口调用访问
* @parem $url 接口地址
* @parem $data 如果使用post 方式发送数据传递 $data 关联数组参数
* @parem $cookie 设定HTTP请求中"Cookie: "部分的内容;多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")
* */
function curl($url,$data=null,$cookie=null)
{
// 初始化 curl
$curl = curl_init(); // 设置URL和相应的选项 curl_setopt — 设置一个cURL传输选项。
//1.由 curl_init() 返回的 cURL 句柄; 2.需要设置的CURLOPT_XXX选项;3.将设置在option选项上的值
curl_setopt($curl, CURLOPT_URL, $url); // url
curl_setopt($curl, CURLOPT_HEADER, 0); // 将头文件的信息作为数据流输出; 1 为输出 ;0 不输出 //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出:
//1 或者 true为不输出,0 或false 直接输出到页面上
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); // http 请求 不验证证书和hosts 请求数据时使用,跳过验证; 例如参数 返回数据
// CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证 默认为true
// 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 如果传送数据---- 使用post 方式
if(isset($data) && !empty($data))
{
//设置post方式提交 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
//表示是否启用第二个option,这里为CURLOPT_POST,设置为1,表示启用时会发送一个常规的POST请求
curl_setopt($curl, CURLOPT_POST, 1); /*这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,
字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
* */
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
// 如果传递 HTTP请求中 的 Cookie
if(isset($cookie) && !empty($cookie))
{
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
} // 抓取URL并把它传递给浏览器 执行curl 返回页面数据
$data = curl_exec($curl);
// 关闭curl 连接
curl_close($curl);
}
// 调用函数
curl($url);

curl  get/post 请求发送 array/json类型数据

// 页面编码与php 执行页面编码一致
header("Content-type: text/html; charset=utf-8"); function curl_post($url,$data=array(),$https=array(),$cookie=null,$json=false){
// 初始化 curl
$curl = curl_init();
// 设置 url
curl_setopt($curl, CURLOPT_URL, $url); //证书验证
if(empty($https))
{
// http请求 不验证证书和 hosts 请求数据时使用,跳过验证; 例如参数 返回数据
// CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证 默认为true
// 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); }else{
curl_setopt($curl, CURLOPT_SSLCERTTYPE, $https['PEM']);
curl_setopt($curl, CURLOPT_SSLCERT, $https['cert_path']);
curl_setopt($curl, CURLOPT_SSLKEYTYPE, $https['PEM']);
curl_setopt($curl, CURLOPT_SSLKEY, $https['key_path']);
} // 如果发送数据
if (!empty($data))
{
//将头文件的信息作为数据流输出; 1 为输出 ;0 不输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//发送JSON数据,
if(($json==true) && is_array($data)){
curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type:application/json;charset=utf-8','Content-Length:'.strlen($data)));
$data = json_encode($data,JSON_UNESCAPED_SLASHES);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
} // 如果传递 HTTP请求中 的 Cookie
if(isset($cookie) && !empty($cookie))
{
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
} //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出:1 或者 true为不输出,0 或false 直接输出到页面上
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置连接超时时间
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60);
//设置请求超时时间
curl_setopt($curl, CURLOPT_TIMEOUT, 60); // 也可将参数放入数组一次传入 curl_setopt_array($ch, $params); //传入curl参数 // 执行
$result = curl_exec($curl);
// 获取错误信息
$errorno = curl_errno($curl);
if ($errorno) {
return $errorno;
}else{
return $result
}
// 关闭连接
curl_close($curl);
}

curl 发送文件

 /**
* @param $url 请求地址
* @param $filename 文件名
* @param $path 文件临时路径
* @param string $type 文件类型
* @return mixed
* @url https://blog.csdn.net/notaloney/article/details/101370497
*/
function curl_post_file($url,$header=[],$filename,$path,$type = 'text/plain')
{
//php 5.5以上的用法
if (class_exists('\CURLFile')) {
$data = array(
'file' => new \CURLFile(realpath($path), $type, $filename),
);
} else {
//5.5以下会走到这步
$data = array(
'file'=>'@'.realpath($path).";type=".$type.";filename=".$filename,
);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, false);
if(!isset($header)){
$header=array('Content-Type:application/json;charset=utf-8','Content-Length:'.strlen($data));
}
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$return_data = curl_exec($ch);
curl_close($ch);
return $return_data;
}

相关文章:PHP-curl multi批处理CPU负载过高的解决办法

      PHP使用curl_multi_exec多线程并发抓取数据

php curl 请求api 接口的更多相关文章

  1. 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/

    在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...

  2. php请求API接口方法

    thinkphp下直接放入公共函数即可. /** * 通过URL获取页面信息 * @param string $url 地址 * @return string 返回页面信息 */ function g ...

  3. 使用HttpWebRequest请求API接口以及其他网站资源

    很多时候,我们项目需要其他网站的资源,而这个被请求的网站可能属于你们自己开发管理的网站.也可能是公网上其他网站对外开发的API接口,比如说腾讯的微信公众平台的API接口.各大短信服务商的短信API接口 ...

  4. 使用js+Ajax请求API接口数据-带请求头方式

    C# http请求带请求头部分 先上代码: <script type="text/javascript"> function zLoginCheck() { var A ...

  5. Laravel POST请求API接口 使用validate表单验证返回欢迎页

    突然遇到的问题  就是使用Laravel进行开发API接口的时候  发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...

  6. PHP Curl请求Https接口

    在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...

  7. 微信小程序请求API接口PHPSESSID变化的解决方式

    微信小程序开发,请求服务器API的方法使用的是微信官方提供的wx.request()方法.在开发中发现,每一个请求都会生成一个独立的PHPSESSID,如下图示: 搜索后得知,这是由于wx.reque ...

  8. 利用在线HTTP接口测试工具ApiPost,模拟移动端请求API接口

    我们做开发一般都是在PC端,然而我们很多时候需要模拟移动端进行接口请求. 比如,当一个API需要根据用户不同的终端来返回不同的数据时,就需要一个工具来模拟不同的终端了. 利用接口测试工具ApiPost ...

  9. php之接口内curl请求其他接口

    今天遇到一个需要写curl的需求,情况是这样的: 同一应用的A系统(购物系统),B系统(答题系统)相互独立,用户数据全部存在于A系统的数据库中, 现在处于B系统的某项操作中,需要在B系统中验证当前请求 ...

随机推荐

  1. 部署和调优 2.2 squid反向代理

    配置反向代理 打开配置文件 vim /etc/squid/squid.conf 修改 http_port 改为 http_port 80 accel vhost vport 在它下面添加一段 cach ...

  2. hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz + zeppelin-0.5.6-incubating-bin-all.tgz(master、slave1和slave2)(博主推荐)(图文详解)

    不多说,直接上干货! 我这里,采取的是CentOS6.5,当然大家也可以在ubuntu 16.04系统里,这些都是小事 CentOS 6.5的安装详解 hadoop-2.6.0.tar.gz + sp ...

  3. Solr 空间搜索配置、按经纬度计算距离排序

    Solr 空间搜索配置 1. 在solr目录下的找到conf文件夹下的schema.xml. <fields> <!-- 在fields元素中添加如下代码 --> <fi ...

  4. sublime3 There are no packages available for installation

    我的是网上下载的绿色版 1.找到sublime\Data\Packages  删除Packages control相关的文件夹和文件 下载https://packagecontrol.io/Packa ...

  5. WebSocket详解(一):初步认识WebSocket技术

    1.什么是Socket?什么是WebSocket? 对于第1次听说WebSocket技术的人来说,两者有什么区别?websocket是仅仅将socket的概念移植到浏览器中的实现吗? 我们知道,在网络 ...

  6. Struts2框架04 struts和spring整合

    目录 1 servlet 和 filter 的异同 2 内存中的字符编码 3 gbk和utf-8的特点 4 struts和spring的整合 5 struts和spring的整合步骤 6 spring ...

  7. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  8. 面试题:hibernate第三天 一对多和多对多配置

    1.1 一对多XML关系映射 1.1.1 客户配置文件: <?xml version="1.0" encoding="UTF-8"?> <!D ...

  9. PCL—点云滤波(基于点云频率) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5010771.html 1.点云的频率 今天在阅读分割有关的文献时,惊喜的发现,点云和图像一样,有可能也存在频率的概 ...

  10. DIY的RPM包怎么签名呢 - 笔记

    参考 https://gist.github.com/fernandoaleman/1376720 如果打不开上一个连接,请参考https://www.cnblogs.com/LiuYanYGZ/p/ ...