余生今天给大家来了PHP 中Curl 的介绍以及使用方法,希望能够帮到大家。
PHP Curl介绍
下面是 Curl的官方解释:
PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
说到底,屁话一堆,对于PHP开发人员来说,你只需要知道他是一个很强大的函数,能够让您对各种服务器勾搭、搭讪和深入交流。 然而实际中最常用的也就是通过CURL 来实现Get与Post请求。
PHP Curl基础使用
说到这里,你应该知道Curl很NB,那么他应该怎么使用呢,总的来说也就四个步骤。【使用之前请确保PHP开启Curl扩展,一般默认都是开启的,具体开启方法请找度娘】
- Curl初始化连接句柄。
- 配置Curl参数。
- 执行Curl请求。
- 释放Curl句柄
看到上述步骤简单明了,我真是佩服自己。好了,废话不多说继续往下看!
第一步. Curl初始化连接句柄
白话来说就是 拿到一把钥匙,接下来就可以拿着这把钥匙进行各种骚操作。
$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
第二步. 配置Curl参数
在这里我给大家写了一个测试地址下面的案例以此请求地址为准 【http://api.hasah.cn/test/curl/curl_test】返回结果为 请求方法,请求参数,请求IP以及是否为Ajax请求
// 设置请求URL
curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test");
// 设置结果以字符串返回,而不是直接输出trun或false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 请求方式为post请求,设置请求参数为$data,下面不写则为GET请求
curl_setopt($ch, CURLOPT_POST, true);
$data = ["id"=>1,"name"=>"张三","age"=>"18","sex"=>"女"];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt 函数为设置传输配置
- 参数1为 Curl句柄,也就是初始化请求返回的句柄
- 参数2为 Curl设置类型,例如设置请求地址,请求方法等骚操作
- 参数3位 Curl设置类型所需要的值。
参数2以及参数三 请参考菜鸟教程 curl_setopt函数
第三步、第四步. 执行Curl请求与释放Curl句柄
// 执行cURL请求
$output = curl_exec($ch);
// 释放Curl句柄
curl_close($ch);
下面吧之前写的代码合并一下,运行,输出一下,我们来看结果
$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
// 设置请求URL
curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test");
// 设置结果以字符串返回,而不是直接输出trun或false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 请求方式为post请求
curl_setopt($ch, CURLOPT_POST, true);
// $data 为请求数据
$data = ["id"=>1,"name"=>"张三","age"=>"18","sex"=>"女"];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 执行cURL请求
$output = curl_exec($ch);
// 释放Curl句柄
curl_close($ch);
var_dump($output);
那么如何Get请求呢? 我们只需要把请求地址后面加上?参数1=值1&参数2=值2,同时把Post请求的参数去掉 ,运行,输出一下,我们来看结果
$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
// 设置请求URL
curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test?id=2&name=李四&age=19&sex=男");
// 设置结果以字符串返回,而不是直接输出trun或false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行cURL请求
$output = curl_exec($ch);
// 释放Curl句柄
curl_close($ch);
echo $output;
这样写起来是不是超级麻烦,没关系,我们这里来给他简单的封装一下,话不多说直接放代码。
/**
* @param $url 要请求的地址
* @param string $method 要请求的方法 默认为GET请求
* @param null $data 请求的参数 默认为null
* @param string[] $header 设置请求头
* @param false $https 是否发送Https 默认不发送
* @param int $timeout 请求超时 单位秒数 默认10秒
* @return mixed 返回请求结果
*/
public function curl_request($url,$method="GET",$data=null,$header=["content-type: application/json"],$https=false,$timeout=10){
$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
curl_setopt($ch, CURLOPT_URL,$url); // 设置请求URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置结果以字符串返回
$method = strtoupper($method);// 为了方便将请求方法字符串转为大写
// 根据传来结果设置不同请求
switch ($method) {
case 'POST':// 当请求为POST请求
curl_setopt($ch, CURLOPT_POST, true);// 请求方式为POST请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
break;
case 'PUT':// 当请求为POST请求
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //请求方式为PUT请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
break;
case 'DELETE':// 当请求为DELETE请求
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //请求方式为DELETE请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
break;
default:
// 默认GET请求,不需要设置
break;
}
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//https请求 不验证HOST
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // 发起请求模拟header头
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);// 允许 Curl 执行的最长秒数。
$result = curl_exec($ch);//执行请求
curl_close($ch);//关闭curl,释放资源
return $result;
}
说到这里就告一段落,看到这里大家感觉对自己有用的,请给博主点个赞哦(´-ω-`),希望能够帮到大家!有什么问题可以在文章下方评论哦!
文章介绍的很详细