easyhttp 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
easyhttp 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
easyhttp 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
easyhttp 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
easyhttp 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

EasyHttp 是一个轻量级、语义化、对IDE友好的HTTP客户端,支持常见的HTTP请求、异步请求和并发请求,让你可以快速地使用 HTTP 请求与其他 Web 应用进行通信。

EasyHttp 并不强制依赖于 cURL,如果没有安装 cURL,EasyHttp 会自动选择使用 PHP 流处理,或者你也可以提供自己的发送 HTTP 请求的处理方式。

安装说明

环境依赖

  • PHP >= 5.5.0
  • 如果使用PHP流处理,allow_url_fopen 必须在php.ini中启用。
  • 如果使用cURL处理,cURL >= 7.19.4,并且编译了OpenSSL 与 zlib。

一键安装

composer require gouguoyin/easyhttp

发起请求

同步请求

常规请求

$response = Http::get('http://httpbin.org/get');

$response = Http::post('http://httpbin.org/post');

$response = Http::patch('http://httpbin.org/patch');

$response = Http::put('http://httpbin.org/put');

$response = Http::delete('http://httpbin.org/delete');

$response = Http::head('http://httpbin.org/head');

$response = Http::options('http://httpbin.org/options');

发送 URL 编码的请求

// application/json(默认)
$response = Http::asJson()->post(...);

// application/x-www-form-urlencoded 
$response = Http::asForm()->post(...);

发送 Multipart 请求

$response = Http::asMultipart(
    'input_name', file_get_contents('photo1.jpg'), 'photo2.jpg'
)->post('http://test.com/attachments');

$response = Http::asMultipart(
    'input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg'
)->post('http://test.com/attachments');

$response = Http::attach(
    'input_name', file_get_contents('photo1.jpg'), 'photo2.jpg'
)->post('http://test.com/attachments');

$response = Http::attach(
    'input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg'
)->post('http://test.com/attachments');
表单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(...);

携带Token令牌的请求

$response = Http::withToken('token')->post(...);

携带认证文件的请求

$response = Http::withCert('/path/server.pem''password')->post(...);

携带SSL证书的请求

// 默认
$response = Http::withVerify(false)->post(...);

$response = Http::withVerify('/path/to/cert.pem')->post(...);

携带COOKIE的请求

$response = Http::withCookies(array $cookies, string $domain)->post(...);

携带协议版本的请求

$response = Http::withVersion(1.0)->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)->post(...);

异步请求

use Gouguoyin\EasyHttp\Response;
use Gouguoyin\EasyHttp\RequestException;

Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json', [], function (Response $response) {
    echo '请求成功,返回内容:' . $response->body() . PHP_EOL;
}, function (RequestException $e) {
    echo '请求异常,错误码:' . $e->getCode() . ',错误信息:' . $e->getMessage() . PHP_EOL;
});

Http::postAsync(...);

Http::patchAsync(...);

Http::putAsync(...);

Http::deleteAsync(...);

Http::headAsync(...);

Http::optionsAsync(...);

并发请求

use Gouguoyin\EasyHttp\Response;
use Gouguoyin\EasyHttp\RequestException;

$stime = microtime(true);

$promises = [
    Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json'),
    Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep1.json'),
    Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep2.json'),
];

Http::concurrency(10)->promise($promises, function (Response $response, $index) {
    echo "发起第 $index 个请求,请求时长:" . $response->json()->second . '秒' . PHP_EOL;
}, function (RequestException $e) {
    echo '请求异常,错误码:' . $e->getCode() . ',错误信息:' . $e->getMessage() . PHP_EOL;
});

$etime = microtime(true);
$total = floor($etime-$stime);
echo "当前页面执行总时长:{$total} 秒" . PHP_EOL;

//输出
发起第 1 个请求,请求时长:1 秒
发起第 2 个请求,请求时长:2 秒
发起第 0 个请求,请求时长:3 秒
当前页面执行总时长:3
如果未调用concurrency()方法,并发次数默认为$promises的元素个数

使用响应

发起请求后会返回一个 GouguoyinEasyHttpResponse 的实例,该实例提供了以下方法来检查请求的响应:

$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;

异常处理

请求在发生客户端或服务端错误时会抛出 GouguoyinEasyHttpRequestException 异常,你可以在请求实例上调用 throw 方法:

$response = Http::post(...);

// 在客户端或服务端错误发生时抛出异常
$response->throw();

return $response['user']['id'];

GouguoyinEasyHttpRequestException $e提供了以下方法来返回异常信息:

$response->getCode() : int;
$e->getMessage() : string;
$e->getFile() : string;
$e->getLine() : int;
$e->getTrace() : array;
$e->getTraceAsString() : string;
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表于DevOps专区
2020/03/31 10:21

easyhttp v1.1发布,新增异步并发请求

EasyHttp 是一个轻量级、语义化、对IDE友好的HTTP客户端,支持常见的HTTP请求、异步请求和并发请求,让你可以快速地使用 HTTP 请求与其他 Web 应用进行通信。 EasyHttp并不强制依赖于cURL,如果没有安装cURL,EasyHttp会自动选择使用PHP流处理,或者你也可以提供自己的发送HTTP请求的处理方式。 1、新增异步并发请求 ...

4
11
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/03/24 16:20

EasyHttp——一个基于GuzzleHttp的轻量级、语义化、对IDE友好的HTTP客户端

EasyHttp 是一个轻量级、语义化、对IDE友好的HTTP客户端,支持常见的HTTP请求、异步请求和并发请求,让你可以快速地使用 HTTP 请求与其他 Web 应用进行通信。 EasyHttp并不强制依赖于cURL,如果没有安装cURL,Eas...

0
1
发表了博客
2020/09/25 10:31

Android使用Kotlin协程封装网络库

概述 最近又要替换网络库成了,导致所有的业务代码都要替换且要重新测试回归。为了防止后续再遇到这样事情,降低替换核心库的成本,现利用协程对网络库进行封装。 理想API调用方式 launch { val response = TestReq(q = "电脑").request<TestResponse>() Toast.makeText(this, response?.r...

0
0
01/11 09:42

Android 开发技术周报 Issue#300

新闻 Google Phone官方应用终于支持完整的通话录音 Nova Launcher第7版公测 带来新的动画和更多的功能 教程 Kotlin Vocabulary | Kotlin 委托代理 Android事件分发机制抽象--钓钩模型 京东APP收银台Kotlin化实践 ...

0
1
发表于Android专区
01/11 09:15

Android 开发技术周报 Issue#300

新闻 Google Phone官方应用终于支持完整的通话录音 Nova Launcher第7版公测 带来新的动画和更多的功能 教程 Kotlin Vocabulary | Kotlin 委托代理 Android事件分发机制抽象--钓钩模型 京东APP收银台Kotlin化实践 ...

0
0
发表于Android专区
01/11 09:38

Android 开发技术周报 Issue#300

新闻 Google Phone官方应用终于支持完整的通话录音 Nova Launcher第7版公测 带来新的动画和更多的功能 教程 Kotlin Vocabulary | Kotlin 委托代理 Android事件分发机制抽象--钓钩模型 京东APP收银台Kotlin化实践 ...

0
0
发表了博客
2019/06/14 15:47

android Easy框架

前言: 一天跟朋友吃饭听说他准备写书,分享他多年的工作技巧以及经验,我不禁心中滂湃写一篇微博总结下工作经验和自己开发的Easy框架(之前有写过一篇但不完整)。干一行爱一行从工作中找到乐趣找到成就感,我个...

0
0
发表了博客
2015/11/21 13:01

.NET库、工具、框架和软件的集合

善于总结,养成良好学习习惯!.NET库、工具、框架和软件的集合

0
7
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
14 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部