169 lines
5.5 KiB
PHP
Executable File
169 lines
5.5 KiB
PHP
Executable File
<?php
|
|
namespace app\service;
|
|
|
|
class Http
|
|
{
|
|
public static function curlGet($url,$apiFields = null, $header = [])
|
|
{
|
|
$ch = curl_init();
|
|
if(!empty($apiFields)){
|
|
$i = 1;
|
|
foreach ($apiFields as $key => $value){
|
|
if($i == 1) {
|
|
if(mb_stripos($url, '?') !== FALSE) {
|
|
$url .= "&" ."$key=" . urlencode($value);
|
|
} else {
|
|
$url .= "?" ."$key=" . urlencode($value);
|
|
}
|
|
} else {
|
|
$url .= "&" ."$key=" . urlencode($value);
|
|
}
|
|
$i ++;
|
|
}
|
|
}
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
|
if(empty($header)){
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
}else{
|
|
curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
|
|
}
|
|
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
|
|
|
//https ignore ssl check ?
|
|
if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ){
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
}
|
|
|
|
$reponse = curl_exec($ch);
|
|
|
|
if (curl_errno($ch)){
|
|
throw new \Exception(curl_error($ch),0);
|
|
}else{
|
|
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
if (200 !== $httpStatusCode){
|
|
throw new \Exception($reponse,$httpStatusCode);
|
|
}
|
|
}
|
|
curl_close($ch);
|
|
return $reponse;
|
|
}
|
|
|
|
public static function curlPost($url, $postFields = null, $header = [], $hasFile = false)
|
|
{
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
//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);
|
|
}
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
|
|
if (is_array($postFields) && 0 < count($postFields))
|
|
{
|
|
if($hasFile) {
|
|
// CURLOPT_POSTFIELDS 值为数组则以multipart/form-data形式提交
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
|
|
} else {
|
|
$jsonHeader = array("Content-Type: application/json; charset=utf-8", "Content-Length:".strlen(json_encode($postFields)));
|
|
$header = array_merge($header, $jsonHeader);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
|
|
}
|
|
|
|
if(!empty($header)) {
|
|
curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
|
|
}
|
|
}
|
|
|
|
$reponse = curl_exec($ch);
|
|
if (curl_errno($ch))
|
|
{
|
|
throw new \Exception(curl_error($ch),0);
|
|
}
|
|
else
|
|
{
|
|
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
if (200 !== $httpStatusCode)
|
|
{
|
|
throw new \Exception($reponse,$httpStatusCode);
|
|
}
|
|
}
|
|
curl_close($ch);
|
|
return $reponse;
|
|
}
|
|
|
|
public static function curlDelete($url, $postFields = null)
|
|
{
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
//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);
|
|
}
|
|
|
|
if (is_array($postFields) && 0 < count($postFields))
|
|
{
|
|
$header = array("Content-Type: application/json; charset=utf-8", "Content-Length:".strlen(json_encode($postFields)));
|
|
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
|
|
}
|
|
$reponse = curl_exec($ch);
|
|
if (curl_errno($ch))
|
|
{
|
|
throw new \Exception(curl_error($ch),0);
|
|
}
|
|
else
|
|
{
|
|
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
if (200 !== $httpStatusCode)
|
|
{
|
|
throw new \Exception($reponse,$httpStatusCode);
|
|
}
|
|
}
|
|
curl_close($ch);
|
|
return $reponse;
|
|
}
|
|
|
|
//POST请求的结果解析
|
|
public static function decodePostResult($url, $param, $header = [], $hasFile = false)
|
|
{
|
|
$resp = [];
|
|
try {
|
|
$resp = json_decode(self::curlPost($url, $param, $header, $hasFile), true);
|
|
$resp['resp_status'] = empty($resp) ? false :true;
|
|
} catch (\Exception $e) {
|
|
$resp = json_decode($e->getMessage(), true);
|
|
$resp['resp_status'] = false;
|
|
}
|
|
|
|
return $resp;
|
|
}
|
|
|
|
//GET请求结果解析
|
|
public static function decodeGetResult($url, $header=[], $param = [])
|
|
{
|
|
$resp = [];
|
|
try {
|
|
$resp = json_decode(self::curlGet($url, $param, $header), true);
|
|
$resp['resp_status'] = empty($resp) ? false :true;
|
|
} catch (\Exception $e) {
|
|
$resp = json_decode($e->getMessage(), true);
|
|
$resp['resp_status'] = false;
|
|
}
|
|
|
|
return $resp;
|
|
}
|
|
}
|