<?php namespace app\common\library; use cores\exception\BaseException; /** * 网络请求工具类 * Class Network * @package app\common\library */ class Network { /** * GET请求 * @param string $url * @param array $query * @param array $headers * @return bool|string * @throws BaseException */ public static function curlGet(string $url, array $query = [], array $headers = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, !empty($query) ? $url . '?' . http_build_query($query) : $url); if ($headers) { if (isset($headers['user_agent'])) { curl_setopt($ch, CURLOPT_USERAGENT, $headers['user_agent']); } if (isset($headers['refer'])) { curl_setopt($ch, CURLOPT_REFERER, $headers['refer']); } if (isset($headers['cookie'])) { curl_setopt($ch, CURLOPT_COOKIE, $headers['cookie']); } curl_setopt($ch, CURLOPT_HEADER, $headers); // 设置header } // 返回最后的Location curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); if (curl_errno($ch)) { $errorMessage = serialize(curl_error($ch)); throwError("访问网络[{$url}]出错(GET):" . $errorMessage); } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode != 200) { throwError("访问网络[{$url}]出错(GET):" . $result); } if (empty($headers)) { return $result; } [, $body] = explode("\r\n\r\n", $result, 2); return $body; } /** * POST请求 * @param string $url * @param array $data 提交的内容 * @param array $headers 头部信息 * @param string $cert 证书 * @param string $certKey 证书秘钥 * @return bool|string * @throws BaseException */ public static function curlPost(string $url, array $data, array $headers = [], string $cert = '', string $certKey = '') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $headers); // 设置header curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 证书默认格式为PEM if ($cert && $certKey) { curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); curl_setopt($ch, CURLOPT_SSLCERT, $cert); curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); curl_setopt($ch, CURLOPT_SSLKEY, $certKey); } curl_setopt($ch, CURLOPT_POST, 1); //post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $result = curl_exec($ch); if (curl_errno($ch)) { $errorMessage = serialize(curl_error($ch)); throwError("访问网络[{$url}]出错(GET):" . $errorMessage); } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode != 200) { throwError("访问网络[{$url}]出错(GET):" . $result); } return $result; } }