上代码
/**
* CURL请求
*
* @param [type] $strUrl 访问地址
* @param string $strMethod 请求方式
* @param array $arrData 请求发送的数据
* @param array $arrHeader 请求时发送的header
* @param boolean $isJson 是否JSON请求
* @param boolean $strFilePath PUT形式上传的文件
* @param integer $intTimeOut 超时时间
* @return void
* @author 一颗大萝北 [email protected]
*/
function curlRequest($strUrl, $strMethod = “GET”, $arrData = array(), $arrHeader = array(), $isJson = false, $strFilePath = false, $intTimeOut = 60)
{
if ($isJson == true && empty($arrHeader[‘Content-Type’])) $arrHeader[‘Content-Type’] = ‘application/json;charset=UTF-8’; //当为JSON提交时header没有设置类型时补充设置
if ($isJson == true && empty($arrHeader[‘Content-Length’])) $arrHeader[‘Content-Length’] = strlen(json_encode($arrData, JSON_UNESCAPED_UNICODE)); //当为JSON提交时header没有设置长度时补充设置
$arrHeaders = [];
foreach ($arrHeader as $k => $v) $arrHeaders[] = $k . ‘:’ . $v; //拼接header
$objCh = curl_init();
curl_setopt($objCh, CURLOPT_SSL_VERIFYPEER, false); //跳过证书检查
curl_setopt($objCh, CURLOPT_SSL_VERIFYHOST, false); //从证书中检查SSL加密算法是否存在
curl_setopt($objCh, CURLOPT_RETURNTRANSFER, true); //返回字符串,而不直接输出
curl_setopt($objCh, CURLOPT_HTTPHEADER, $arrHeaders); //设置header
curl_setopt($objCh, CURLOPT_TIMEOUT, $intTimeOut); //设置超时时间
curl_setopt($objCh, CURLOPT_URL, $strUrl);
$strMethod = strtoupper($strMethod); //统一转为大写
// if (!empty($arrData) && !$isJson) $objCurlData = http_build_query($arrData);
if (!empty($arrData) && $isJson) $arrData = json_encode($arrData, JSON_UNESCAPED_UNICODE);
if ($strFilePath !== false && !is_file($strFilePath) && $strMethod != ‘PUT’) return [‘ok’ => false, ‘msg’ => ‘选择的文件不存在或请求方式不是PUT’];
switch ($strMethod) {
case ‘PUT’:
curl_setopt($objCh, CURLOPT_PUT, true);
if (is_file($strFilePath) && $strFilePath !== false) {
//存在文件上传
curl_setopt($objCh, CURLOPT_INFILE, fopen($strFilePath, ‘rb’)); //设置资源句柄
curl_setopt($objCh, CURLOPT_INFILESIZE, filesize($strFilePath));
}
break;
case ‘POST’:
curl_setopt($objCh, CURLOPT_POST, true);
break;
case ‘GET’:
curl_setopt($objCh, CURLOPT_CUSTOMREQUEST, $strMethod);
if (!empty($arrData) && !$isJson) $arrData = http_build_query($arrData);
break;
default:
curl_setopt($objCh, CURLOPT_CUSTOMREQUEST, $strMethod);
break;
}
curl_setopt($objCh, CURLOPT_POSTFIELDS, $arrData);
$response = curl_exec($objCh);
if ($error = curl_error($objCh)) {
return [‘ok’ => false, ‘msg’ => curl_error($objCh)];
}
curl_close($objCh);
return [‘ok’ => true, ‘msg’ => ‘成功!’, ‘data’ => $response];
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
一颗大萝北
本文地址: PHPCURL 使用 POST/GET/PUT/DELETE等方式模拟请求
本文地址: PHPCURL 使用 POST/GET/PUT/DELETE等方式模拟请求