/*
* 发起POST网络提交
* @params string $url : 网络地址
* @params json $data : 发送的json格式数据
*/
static public function https_post($url, $data) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
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;
}
/*
* 发起GET网络提交
* @params string $url : 网络地址
*/
static public function https_get($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
if (curl_errno($curl)) {
return 'Errno' . curl_error($curl);
} else {
$result = curl_exec($curl);
}
curl_close($curl);
return $result;
}
/**
* 异步post请求
* @param type $host 域名 www.baidu.com
* @param type $url 请求方法链接:/party.php/api/####
* @param type $param 参数数组
*/
static public function http_post_asynchronous_request($host = '', $url = '', $param = array()) {
$host = isset($host) ? $host : 'www.baidu.com';
$query = isset($param) ? http_build_query($param) : '';
$port = 80;
$errno = 0;
$errstr = '';
$timeout = 10;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
$out = "POST " . $url . " HTTP/1.1\r\n";
$out .= "host:" . $host . "\r\n";
$out .= "content-length:" . strlen($query) . "\r\n";
$out .= "content-type:application/x-www-form-urlencoded\r\n";
$out .= "connection:close\r\n";
$out .= $query;
fputs($fp, $out);
usleep(20000); //避免nginx服务器链接断开无法 报499 链接失效
fclose($fp);
}
/**
* curl请求接口
* @param $url
* @param mixed $params
* @param string $method
* @param array $header ['Content-Type: application/json','token: xxxxx','...']
* @param int $need_exception_check 需要抛出异常检查
* @param int $timeout 最大1秒
* @return mixed
* @throws Exception
*/
function curlRequest($url, $params = [], $method = 'POST', $header = [], $need_exception_check = true, $timeout = 4) {
$opts = [
CURLOPT_TIMEOUT => $timeout,
CURLOPT_HTTPHEADER => $header,
CURLOPT_RETURNTRANSFER => true,//curl执行不直接输出在页面上(省去ob_clean)
CURLOPT_SSL_VERIFYPEER => false, //不做证书校验
CURLOPT_SSL_VERIFYHOST => false //不做证书校验
];
/* 根据请求类型设置特定参数 */
switch (strtoupper($method)) {
case 'GET':
$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
break;
case 'POST':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'DELETE':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
$opts[CURLOPT_POSTFIELDS] = http_build_query($params);
break;
case 'PUT':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 0;
$opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
$opts[CURLOPT_POSTFIELDS] = http_build_query($params);
break;
default:
throw new Exception('不支持的请求方式!');
}
$ch = curl_init(); //初始化curl
curl_setopt_array($ch, $opts); //批量设置
$response = curl_exec($ch); //发起请求
$error_msg = curl_error($ch); //错误信息
curl_close($ch); //关闭curl链接
//超时或请求失败
if ($error_msg && $need_exception_check) {
throw new Exception($error_msg);
}
$response = json_decode($response, true);
return $response;
}
PHP的3种请求方式 GET POST 伪异步POST
最新推荐文章于 2023-07-30 09:51:17 发布