Skip to content

webguosai/http-client-v2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

http client v2

Latest Stable Version Total Downloads Latest Unstable Version License

运行环境

  • 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

About

🔥🔥🔥HTTP 客户端

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages