EasyHttp 是一个轻量级、语义化、对IDE友好的HTTP客户端,支持常见的HTTP请求、异步请求和并发请求,让你可以快速地使用 HTTP 请求与其他 Web 应用进行通信。
EasyHttp并不强制依赖于cURL,如果没有安装cURL,EasyHttp会自动选择使用PHP流处理,或者你也可以提供自己的发送HTTP请求的处理方式。
如果您觉得EasyHttp对您有用的话,别忘了给点个赞哦^_^ !
github:github.com/gouguoyin/easyhttp
gitee:gitee.com/gouguoyin/easyhttp
composer require gouguoyin/easyhttp
$response = Http::get('http://httpbin.org/get');$response = Http::get('http://httpbin.org/get?name=gouguoyin');$response = Http::get('http://httpbin.org/get?name=gouguoyin', ['age' => 18]);$response = Http::post('http://httpbin.org/post');$response = Http::post('http://httpbin.org/post', ['name' => 'gouguoyun']);$response = Http::patch(...);$response = Http::put(...);$response = Http::delete(...);$response = Http::head(...);$response = Http::options(...);
// application/x-www-form-urlencoded(默认)$response = Http::asForm()->post(...);// application/json$response = Http::asJson()->post(...);
$response = Http::asMultipart( 'file_input_name', file_get_contents('photo1.jpg'), 'photo2.jpg')->post('http://test.com/attachments');$response = Http::asMultipart( 'file_input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg')->post(...);$response = Http::attach( 'file_input_name', file_get_contents('photo1.jpg'), 'photo2.jpg')->post(...);$response = Http::attach( 'file_input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg')->post(...);
表单enctype属性需要设置成 multipart/form-data
$response = Http::withHeaders([ 'x-powered-by' => 'gouguoyin'])->post(...);
// 默认$response = Http::withRedirect(false)->post(...);$response = Http::withRedirect([ 'max' => 5, 'strict' => false, 'referer' => true, 'protocols' => ['http', 'https'], 'track_redirects' => false])->post(...);
// Basic认证$response = Http::withBasicAuth('username', 'password')->post(...);// Digest认证(需要被HTTP服务器支持)$response = Http::withDigestAuth('username', 'password')->post(...);
$response = Http::withUA('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36')->post(...);
$response = Http::withToken('token')->post(...);
$response = Http::withCert('/path/server.pem', 'password')->post(...);
// 默认$response = Http::withVerify(false)->post(...);$response = Http::withVerify('/path/to/cert.pem')->post(...);
$response = Http::withCookies(array $cookies, string $domain)->post(...);
$response = Http::withVersion(1.1)->post(...);
$response = Http::withProxy('tcp://localhost:8125')->post(...);$response = Http::withProxy([ 'http' => 'tcp://localhost:8125', // Use this proxy with "http" 'https' => 'tcp://localhost:9124', // Use this proxy with "https", 'no' => ['.com.cn', 'gouguoyin.cn'] // Don't use a proxy with these])->post(...);
$response = Http::timeout(60)->post(...);
$response = Http::delay(60)->post(...);
$response = Http::concurrency(10)->promise(...);
use Gouguoyin\EasyHttp\Response;use Gouguoyin\EasyHttp\RequestException;Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json', ['token' => TOKEN], function (Response $response) { echo '异步请求成功,响应内容:' . $response->body() . PHP_EOL;}, function (RequestException $e) { echo '异步请求异常,错误码:' . $e->getCode() . ',错误信息:' . $e->getMessage() . PHP_EOL;});echo json_encode(['code' => 200, 'msg' => '请求成功'], JSON_UNESCAPED_UNICODE) . PHP_EOL;//输出{"code":200,"msg":"请求成功"}异步请求成功,响应内容:{"code":200,"msg":"success","second":3}Http::getAsync('http1://easyhttp.gouguoyin.cn/api/sleep3.json', function (Response $response) { echo '异步请求成功,响应内容:' . $response->body() . PHP_EOL;}, function (RequestException $e) { echo '异步请求异常,错误信息:' . $e->getMessage() . PHP_EOL;});echo json_encode(['code' => 200, 'msg' => '请求成功'], JSON_UNESCAPED_UNICODE) . PHP_EOL;//输出{"code":200,"msg":"请求成功"}异步请求异常,错误信息:cURL error 1: Protocol "http1" not supported or disabled in libcurl (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)Http::postAsync(...);Http::patchAsync(...);Http::putAsync(...);Http::deleteAsync(...);Http::headAsync(...);Http::optionsAsync(...);
use Gouguoyin\EasyHttp\Response;use Gouguoyin\EasyHttp\RequestException;$promises = [ Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json'), Http::getAsync('http1://easyhttp.gouguoyin.cn/api/sleep1.json', ['name' => 'gouguoyin']), Http::postAsync('http://easyhttp.gouguoyin.cn/api/sleep2.json', ['name' => 'gouguoyin']),];Http::concurrency(10)->multiAsync($promises, function (Response $response, $index) { echo "发起第 $index 个异步请求,请求时长:" . $response->json()->second . '秒' . PHP_EOL;}, function (RequestException $e, $index) { echo "发起第 $index 个请求失败,失败原因:" . $e->getMessage() . PHP_EOL;});//输出发起第 1 个请求失败,失败原因:cURL error 1: Protocol "http1" not supported or disabled in libcurl (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)发起第 2 个异步请求,请求时长:2 秒发起第 0 个异步请求,请求时长:3 秒
如果未调用concurrency()方法,并发次数默认为$promises的元素个数,$promises数组里必须是异步请求
发起请求后会返回一个 Gouguoyin\EasyHttp\Response $response的实例,该实例提供了以下方法来检查请求的响应:
$response->body() : string;$response->json() : object;$response->array() : array;$response->status() : int;$response->ok() : bool;$response->successful() : bool;$response->serverError() : bool;$response->clientError() : bool;$response->headers() : array;$response->header($header) : string;
请求在发生客户端或服务端错误时会抛出 Gouguoyin\EasyHttp\RequestException $e异常,该实例提供了以下方法来返回异常信息:
$e->getCode() : int;$e->getMessage() : string;$e->getFile() : string;$e->getLine() : int;$e->getTrace() : array;$e->getTraceAsString() : string;