webguosai / http-client-v2
http客户端
dev-main
2025-08-02 10:45 UTC
Requires
- php: >=7.2
- ext-curl: *
- ext-iconv: *
- ext-json: *
- ext-libxml: *
- ext-openssl: *
- ext-simplexml: *
Requires (Dev)
- symfony/var-dumper: ^3.4
This package is auto-updated.
Last update: 2025-08-02 10:45:48 UTC
README
运行环境
- php >= 7.2
- composer
安装
composer require webguosai/http-client-v2 -vvv
使用
初始化
$options = [ //超时 (单位秒,-1表示不超时) 'timeout' => 3.0, // 代理ip // http:127.0.0.1:9527 或 http://127.0.0.1:9527 // https:https://127.0.0.1:9527 // socks5:socks5://127.0.0.1:9527 'proxy' => '', // 重定向 (-1表示:无限制,默认0表示不重定向) 'redirect' => 0, //cookie自动保存路径 'cookieJarFile' => 'cookie.txt', ]; // 实例化 $http = new \Webguosai\HttpClient\HttpClient($options); // 工厂模式 $http = \Webguosai\HttpClient\HttpClient::factory([ 'timeout' => 3, ])
链式
$http->timeout(5.5)->redirect(5)->proxy('socks5://127.0.0.1:9527');
请求
$url = 'https://httpbin.org'; $data = ['data' => '111', 'data2' => '222']; $headers = [ 'User-Agent' => 'http-client browser', 'cookie' => 'login=true' ]; // 请求方式 $response = $http->request($url, $method, $data, $headers); $response = $http->get($url, $query, $headers); $response = $http->post($url, $data, $headers); $response = $http->put($url, $data, $headers); $response = $http->patch($url, $data, $headers); $response = $http->delete($url, $data, $headers); $response = $http->head($url, $data, $headers); $response = $http->options($url, $data, $headers);
响应
[$status, $throw] = $response->ok(); // $response->getRequestHeaders(); // 请求头 $response->getHeaders(); // 响应头 $response->getBody(); // body $response->getStatusCode(); // http状态码 $response->getInfo(); // 其它信息 $response->getResponse(); // 获取响应的报文信息(包含header头、body) $response->json(); // json $response->xml(); // xml $response->ok();// curl_code = 0 && http_code = 200 $response->getCurlErrorCode(); // 错误信息
data 传值方式
// multipart/form-data $data = ['data' => '111', 'data2' => '222']; // application/x-www-form-urlencoded $data = http_build_query($data); // application/json $data = json_encode($data); // 文件上传 $_FILES['file'] 接收 $data = [ 'file' => new \CURLFile('1.jpg'), ]; $response = $http->post($url, $data);
headers 传值方式
// 数组传递 $headers = [ 'User-Agent: chrome', 'User-Agent' => 'chrome', ]; // 纯字符串 (一般为从浏览器复制) $headers = 'User-Agent: chrome Referer: https://www.x.com Cookie: cookie=6666666'; $response = $http->post($url, $data, $headers);
实操
$http = \Webguosai\HttpClient\HttpClient::factory([ 'timeout' => 3, ]) $response = $http->get('https://www.baidu.com'); /** @var $throw \Webguosai\HttpClient\Exception\RequestException */ [$status, $throw] = $response->ok(); if ($status) { var_dump($response->getBody()); // body var_dump($response->json()); var_dump($response->xml()); } else { var_dump($throw->getMessage()); // 错误内容 var_dump($throw->getRequestArgs()); // 请求前的传参 var_dump($throw->getContext()); // 上下文 信息 var_dump($throw->getErrorType()); // 错误类型 var_dump($throw->getHttpStatusCode()); // http 状态码 var_dump($throw->getCurlErrorCode()); // curl 错误码 }
异常
- ok
// 自定义异常错误 [$status, $throw] = $response->ok(function (\Webguosai\HttpClient\Contract\ResponseInterface $response) { if ($response->getBody() !== 'hello world') { throw new \Webguosai\HttpClient\Exception\RequestException('自定义异常错误', $response); } }); if ($status) { var_dump($response->json()); } else { var_dump($throw->getMessage()); // 错误内容 var_dump($throw->getRequestArgs()); // 请求前的传参 var_dump($throw->getContext()); // 上下文 信息 var_dump($throw->getErrorType()); // 错误类型 var_dump($throw->getHttpStatusCode()); // http 状态码 var_dump($throw->getCurlErrorCode()); // curl 错误码 }
- throw
try { $response->throw(); var_dump($response->json()); // 自定义异常错误 if ($response->getBody() !== 'hello world') { throw new \Webguosai\HttpClient\Exception\RequestException('自定义异常错误', $response); } } catch (\Webguosai\HttpClient\Exception\RequestException $e) { var_dump($e->getMessage()); // 错误内容 var_dump($e->getRequestArgs()); // 请求前的传参 var_dump($e->getContext()); // 上下文 信息 var_dump($e->getErrorType()); // 错误类型 var_dump($e->getHttpStatusCode()); // http 状态码 var_dump($e->getCurlErrorCode()); // curl 错误码 }
License
MIT