http curl
<?php
namespace app;
use App\Library\Common;
use App\Library\Exception\ExceptionApp;
use App\Tools\unknown;
class HttpCurl
{
public static function sendPost($url, $data, & $status = null, $timeout = 10, $header = [])
{
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
if ( !empty ($data)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的数据包
}
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
$defaultHeader = ['Expect:'];
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
}
curl_close($curl); // 关闭CURL会话
return $result;
}
public static function sendJsonPost($url, $data, & $status = null, $timeout = 10, $header = [])
{
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
if ( !empty ($data)) {
$strJsonData = json_encode($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $strJsonData); // Post提交的数据包
}
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
$defaultHeader = [
'Expect:',
'Content-Type: application/json', // 设置内容类型为JSON
'Content-Length: ' . strlen(json_encode($data)) // 设置内容长度
];
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
Common::logNewError("", "http请求失败", new ExceptionApp($errmsg));
}
curl_close($curl); // 关闭CURL会话
return $result;
}
public static function sendJsonPost256($url, $data, & $status = null, $timeout = 10, $header = [])
{
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
if ( !empty ($data)) {
$strJsonData = json_encode($data, JSON_UNESCAPED_UNICODE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $strJsonData); // Post提交的数据包
}
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
$defaultHeader = ['Expect:',
'Content-Type: application/json', // 设置内容类型为JSON
'Content-Length: ' . strlen(json_encode($data)) // 设置内容长度
];
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
}
curl_close($curl); // 关闭CURL会话
return $result;
}
/**
* @param unknown $url 请求网址
* @param string $params 请求参数
* @param string $requestType 请求方式 POST、POST-JSON,默认POST
* @return string|unknown
*/
public static function sendPostV2($url, $params = false, $requestType = "POST", $headers = [])
{
$requestType = strtoupper($requestType);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);//不抓取头部信息。只返回数据
curl_setopt($curl, CURLOPT_TIMEOUT,1000);//超时设置
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//1表示不返回bool值
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POST, 1);
if('POST' == $requestType){
empty($headers) && $headers = array('Content-Type: application/x-www-form-urlencoded');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);//重点
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
}else if('POST-JSON' == $requestType){//post json格式数据
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Cache-Control: no-cache',
'Pragma: no-cache'
));//重点
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
}
Common::logInfo("", "http请求参数,method:".$requestType, ['url'=>$url,'data'=>$params,'headers'=>$headers]);
$response = curl_exec($curl);
$rst = (!empty($response) && !empty($responseArr = json_decode($response, true))) ? json_encode($responseArr, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) : $response;
Common::logInfo("", "http响应结果:", $rst);
if (curl_errno($curl)) {
return curl_error($curl);
}
curl_close($curl);
$response = json_decode($response,true);
return $response;
}
/**
* 发送get请求
* @param $url
* @param $data
* @param null $status
* @param int $timeout
* @param array $header
* @return mixed
*/
public static function sendGet($url, $data, & $status = null, $timeout = 10, $header = [])
{
if ( !empty ($data)) {
(strpos($url, "?") !== false ) ? $url = $url . "&" . http_build_query($data) : $url = $url . "?" . http_build_query($data);
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
$defaultHeader = ['Expect:','Content-Type:application/json'
];//'Content-Type:text/xml','Connection:Keep-Alive'
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
}
curl_close($curl); // 关闭CURL会话
return $result;
}
public static function sendMsGet($url, $data, & $status = null, $timeout = 10000, $header = [])
{
if ( !empty ($data)) {
(strpos($url, "?") !== false ) ? $url = $url . "&" . http_build_query($data) : $url = $url . "?" . http_build_query($data);
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); // 设置超时限制防止死循环
$defaultHeader = ['Expect:'];
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
}
curl_close($curl); // 关闭CURL会话
return $result;
}
public static function sendGetV2($url, $data, & $status = null, $timeout = 10, $header = [])
{
if ( !empty ($data)) {
(strpos($url, "?") !== false ) ? $url = $url . "&" . http_build_query($data) : $url = $url . "?" . http_build_query($data);
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
curl_setopt($curl,CURLOPT_HEADER,true);
$defaultHeader = ['Expect:'];
//当传入header时合并处理,之前传入的header会被覆盖
if ($header && is_array($header)) {
$defaultHeader = array_merge($defaultHeader, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY , true);
$result = curl_exec($curl); // 执行操作
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$errmsg = ',status:'.$status;
if ($result === false) {
$errmsg .= ',errmsg:'.curl_error($curl);
Common::logNewError("", "http请求失败", new ExceptionApp($errmsg));
}
$res = [
'header' => str_replace(["\n", "\t", "\r"], '', $result),
'code' => $status
];
curl_close($curl); // 关闭CURL会话
return $res;
}
}
posted on 2025-05-09 21:47 andydaopeng 阅读(14) 评论(0) 收藏 举报
浙公网安备 33010602011771号