php常用请求方法总结(curl,file_get_contents,SoapClient)

php php 1081      收藏
php常用请求方法(curl,file_get_contents,SoapClient)

curl请求方法

/**
 * CURL 提交请求数据
 * @param string $url 请求URL
 * @param string $postData 请求发送的数据
 * @param int $port 请求端口
 * @param int $timeout 超时时间
 * @param array $headers 请求头信息
 * @return bool|mixed
 */
function curl_post($url, $postData, $port = 80, $timeout = 25, $headers = []) {
    //超时时间处理
    $timeout = intval($timeout);
    $timeout = $timeout <= 0 ? 25 : $timeout;

    $ch       = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PORT, $port);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    if ((is_array($headers) || is_object($headers)) && count($headers)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $res = curl_exec($ch);

    //错误处理
    $errCode = curl_errno($ch);
    if ($errCode > 0) {
        curl_close($ch);
        return false;
    } else {
        //获取HTTP码
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpCode != 200) {
            curl_close($ch);
            return false;
        } else {
            curl_close($ch);
            return $res;
        }
    }
}


file_get_contents请求方法

/**
 * 统一封装的file_get_contents
 * @param  string  $url 请求url
 * @param  integer $timeout 超时时间
 * @param  array   $header 请求头部
 * @return 
 */
function pft_file_get_contents($url, $timeout = 10, $header = []){
    $url     = strval($url);
    $timeout = intval($timeout);
    $timeout = $timeout <= 0 ? 10 : $timeout;

    $contextOptions = [
        'http' => ['timeout' => $timeout]
    ];
    if($header) {
        $contextOptions['http']['header'] = $header;
    }

    $context = stream_context_create($contextOptions);
    $res = file_get_contents($url, false, $context);
    return $res;
}


soap请求方法

/**
 * 统一封装的SOAP客户端封装,有些系统还在使用soap协议提供接口
 * $soapClient = new PftSoapClient('xxx.wsdl');
 * $soapClient->setTimeout(25);
 * $soapClient->getMyMoney($params);
 */
class PftSoapClient extends \SoapClient {
    //超时的时间
    private $timeout = 0;

    //设置超时时间
    public function setTimeout($timeout) {
        $timeout = intval($timeout);
        $timeout = $timeout <= 0 ? 25 : $timeout;

        $this->timeout = $timeout;
    }

    //请求接口
    public function __doRequest($request, $location, $action, $version, $oneWay = FALSE) {
        if ($this->timeout <= 0) {
            //使用默认的方式
            $res = parent::__doRequest($request, $location, $action, $version, $oneWay);
        } else {
            //使用添加了超时的方式
            $socketTime = ini_get('default_socket_timeout');
            ini_set('default_socket_timeout', $this->timeout);
            $res = parent::__doRequest($request, $location, $action, $version, $oneWay);
            ini_set('default_socket_timeout', $socketTime);
        }

        return $res;
    }
}