123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- namespace App\Library\HttpRequest;
- /**
- * Requests
- *
- * @author he xiang <ihexiang@163.com>
- * @version 1.0.0
- */
- class Client
- {
- /**
- * GET method
- *
- * @var string
- * */
- const GET = 'GET';
- /**
- * POST method
- *
- * @var string
- * */
- const POST = 'POST';
- private function __construct()
- {
- }
- /**
- * get 请求方法
- *
- * @param string $url
- * @param array $headers
- * @param array $options
- * @return Response
- * */
- public static function get(string $url, array $headers = [], array $options = [])
- {
- return self::request($url,self::GET,$headers,[],$options);
- }
- /**
- * post 请求方法
- *
- * @param string $url
- * @param array $headers
- * @param array $data
- * @param array $options
- * @return Response
- * */
- public static function post(string $url, array $headers = [], array $data = [], array $options = [])
- {
- return self::request($url,self::POST,$headers,$data,$options);
- }
- /**
- * 请求方法
- *
- * @param string $url
- * @param string $method
- * @param array $headers
- * @param array $data
- * @param array $options
- * @return Response
- * */
- private static function request(string $url, string $method, array $headers = [], array $data = [], array $options = [])
- {
- $url_info = parse_url($url);
- $domain = $url_info['host'];
- $is_https = strtolower($url_info['scheme']) == 'https';
- $port = $is_https ? 443 : 80;
- $client = new \Swoole\Coroutine\Http\Client($url_info['host'], $port, $is_https);
- $sets = [];
- $sets['timeout'] = isset($options['timeout']) ? intval($options['timeout']) : -1;
- //HTTPS
- if($is_https){
- $sets['ssl_host_name'] = $domain;
- }
- $content_type = '';
- if($headers){
- foreach ($headers as $key=>$val){
- $tempKey = strtolower($key);
- if($tempKey == 'content-type'){
- $content_type = $val;
- }
- }
- }
- $client->set($sets);
- $client->setHeaders($headers);
- //设置cookies
- if(isset($options['cookies'])){
- $client->setCookies($options['cookies']);
- }
- //拼装path
- $path = isset($url_info['path']) ? strval($url_info['path']) : '';
- if(isset($url_info['query'])){
- $path .= '?'.$url_info['query'];
- }
- if(isset($url_info['fragment'])){
- $path .= '#'.$url_info['fragment'];
- }
- if($method == self::GET){
- $client->get($path);
- }elseif ($method == self::POST){
- $postContent = $data;
- //json
- if(stripos($content_type,'json') !== false){
- $postContent = json_encode($data);
- }
- $client->post($path,$postContent);
- }
- $response = new Response([
- 'errCode'=>$client->errCode,
- 'errMsg'=>$client->errMsg,
- 'body'=>strval($client->getBody()),
- 'statusCode'=>intval($client->getStatusCode()),
- 'cookies'=>$client->getCookies(),
- 'headers'=>$client->getHeaders(),
- ]);
- // $response = [
- // 'errCode'=>$client->errCode,
- // 'errMsg'=>$client->errMsg,
- // 'body'=>strval($client->getBody()),
- // 'statusCode'=>intval($client->getStatusCode()),
- // 'cookies'=>$client->getCookies(),
- // 'headers'=>$client->getHeaders(),
- // ];
- $client->close();
- return $response;
- }
- }
|