摘要:的功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下建立请求的基本步骤。代码如下我们可以通设置函数的不同参数,可以获得不同的结果,这也是扩展的强大之处。函数的常用参数选项具体可查阅官方文档,此处就不列举。
PHP的curl功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下PHP建立curl请求的基本步骤。
$ch = curl_init(); // 创建一个新的CURL资源赋给变量$ch
curl_setopt($ch, CURLOPT_URL, $url); // 设置URL
$response = curl_exec($ch); // 执行,获取URL并输出到浏览器
curl_close($ch); // 释放资源
如果我们希望获取内容但不输出,可以使用 CURLOPT_RETURNTRANSFER 参数,并设置其值为非0或者true值。代码如下:curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
我们可以通设置函数curl_setopt()的不同参数,可以获得不同的结果,这也是CURL扩展的强大之处。curl_setopt()函数的常用参数选项具体可查阅官方文档,此处就不列举。
下面是我常用的curl get和post请求的方法:
get请求:
</>复制代码
public function httpGet(string $url = "")
{
// 记录请求信息的日志
// todo
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
//https 请求
if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
$response = curl_exec($ch);
$errorCode = curl_errno($ch);
curl_close($ch);
if (!empty($errorCode)) {
// 可记录错误码日志
return null;
}
// 记录返回结果日志
return $response;
} catch (Exception $e) {
$errorLog = [
"msg" => $e->getMessage(),
"trace" => $e->getTraceAsString(),
"data" => [
"url" => $url,
]
];
// 记录错误日志
return null;
}
}
POST请求:
</>复制代码
public function httpPost(string $url = "", array $data = [])
{
// 记录请求信息的日志
// todo
try {
$jsonData = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
"Content-Type: application/json; charset=utf-8",
"Content-Length:" . strlen($jsonData)
]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//https 请求
if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
$result = curl_exec($curl);
$errorCode = curl_errno($curl);
curl_close($curl);
if (!empty($errorCode)) {
// 可记录错误码日志
return null;
}
// 记录返回结果日志
return json_decode($result, true);
} catch (Exception $e) {
$errorData = [
"msg" => $e->getMessage(),
"trace" => $e->getTraceAsString(),
"data" => [
"url" => $url,
"postData" => $data
]
];
// 记录错误日志
return null;
}
}
欢迎各位朋友进行交流。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29899.html
摘要:今天跑脚本遇到一个奇怪的问题,就是请求到后期会出现程序阻塞卡死,无异常无响应,一直挂起,脚本也不会自动结束。设置允许执行的最长秒数。增加执行超时后的请求设置函数。从错误类型中,看到确实是有一些请求在秒内未能执行完毕。 今天跑脚本遇到一个奇怪的问题,就是cURL请求到后期会出现程序阻塞卡死,无异常无响应,一直挂起,脚本也不会自动结束。跟对方沟通后说,哥们儿,是不是你们的程序有问题啊,这边...
QueryList 简介 QueryList是一套简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery。 特性 拥有与jQuery完全相同的CSS3 DOM选择器 拥有与jQuery完全相同的DOM操作API 拥有通用的列表采集方案 拥有强大的HTTP请求套件,轻松实现如:模拟登陆、伪造浏览器、HTTP代理等意复杂的网络请求 拥有乱码解决方案 拥有强大的内容过滤功能,可使用jQue...
摘要:目前支持和协议。除此以外,还能在可能的字符编码之间相互进行编码转换。如果启用了这个功能,输入字符编码可能将自动转换成。这些可能在未来增加。 前言 PHP7即将在12月3日正式发布,而RC8是已经差不多稳定了的版本,后续的GA版本主要都是在修复bug,所以为了未来开发环境的升级,准备尝试安装一下。 PHP7.0.0将在12月3日正式发布,但是12月2日时github已经发布出PHP-7...
阅读 2105·2021-09-30 09:53
阅读 1971·2021-09-24 09:48
阅读 1848·2019-08-30 14:01
阅读 2281·2019-08-29 18:35
阅读 1325·2019-08-26 18:27
阅读 3059·2019-08-26 12:12
阅读 1036·2019-08-23 17:16
阅读 1055·2019-08-23 15:31