当前位置: 首页 > 软件库 > 服务器软件 > HTTP服务器 >

easyhttp

轻量级语义化 HTTP 客户端
授权协议 MIT
开发语言 PHP
所属分类 服务器软件、 HTTP服务器
软件类型 开源软件
地区 国产
投 递 者 程皓轩
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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;
  • github源码地址:https://github.com/zhou-you/RxEasyHttp 缓存使用 缓存介绍 本库的缓存主要分okhttp的Cache缓存和自定义的RxCache缓存,大家有疑问okhttp有缓存,retrofit也是支持通过header来设置缓存,为什么还要自定义一个缓存机制呢?通过自定义RxCache缓存使用更简单,更符合我们常用的业务需求(常用的缓存策略也不会太复杂

  • 介绍:EasyHttp       EasyHttp http请求类库,支持net4.0++       github:https://github.com/EasyHttp/EasyHttp 使用: 环境:net4.0 、EasyHttp(1.7版本) 准备工作:准备webapi调用接口 public class UnityController : ApiController {

  • 一、 引入项目 compile ‘com.liwy.easyhttp:easyhttp:1.0.7’ 二、 初始化 在Application里初始化,主要初始化内容为统一解析回调和IHttpService实现类传入,具体如下: // 实例化请求实现类 OkHttpClient okHttpClient = new OkHttpClient.Builder().co

  • 一、前文 EasyHttp/EasyHttp:Http Library for C# An easy to use HTTP client that supports: HEAD, PUT, DELETE, GET, POST Cookies Authentication Dynamic and Static Typing XML, JSON and WWW-Url form encoded en

  • EasyHttp 概述 基于RxJava2+Retrofit2+RxCache的网络请求框架 更新日志 2017.04.28 onError(int code, String errorMsg)非网络问题不再统一返回1003,而是返回服务器的错误状态码 。 2017.04.26 使用RxCache缓存机制,可自定义缓存过期时间,及数据分页缓存等功能。 统一的请求错误处理; 统一的网络状态判断处理;

  • 由于在用C#请求DRF的API时遇到了认证问题,只好用个第三方的包来解决这个问题。 同时了解到了HttpLib和EasyHttp,然后决定使用EasyHttp。 项目的地址:https://github.com/EasyHttp/EasyHttp。在VS上可以直接用NuGet安装。 主要使用的内容在EasyHttp.Http中。 using EasyHttp.Http; 下面是一个get请求的示例

  • github资源下载地址: https://github.com/EasyHttp/EasyHttp.git 实现了简单的http客户端库。 VS可以通过NuGet方式下载库文件。 post Json数据举例子: public class Customer { public string Name; public string Email; }

 相关资料
  • 主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否

  • 我对Android异步Http客户端(Http://loopj.com/android-async-http/)有一个问题。直到今天,我使用的是1.4.6版本和我的代码(见下面的工作没有问题)。 其中RestClient是:

  • 没有标记语言就没有Web和丰富多彩的互联网,但创造了Web的HTML语言并非尽善尽美,存在诸如难读、难写、难以向其他格式转换的问题。究其根源是因为HTML语言是一种“重”标记语言,对机器友好而并非对人友好。 下面这段HTML源码,非技术控阅读起来会遇到困难。 <html> <head> <meta content='application/xhtml+xml;charset=utf-8' ht

  • 对于大多数应用程序来说,轻客户端是完整的区块链系统的重要组成部分。Tendermint 为轻客户端应用程序提供了独特的速度和安全性。 请见我们的 lite package。 概述 轻客户端协议的目标是为最近的块哈希获取提交,其中提交包含来自最后一个已知验证者集的大部分签名。从那里,所有的应用状态都可以用默克尔证明进行验证。 属性 你得到了 Tendermint 的全部担保安全优势;不需要等待确认。

  • 问题 你想创建一个 HTTP 客户端。 解决方案 在这个方法中,我们将使用 node.js's HTTP 库。我们将从一个简单的客户端 GET 请求示例返回计算机的外部 IP 。 关于 GET http = require 'http' http.get { host: 'www.google.com' }, (res) -> console.log res.statusCode get

  • HTTP客户端用于抓取网页HTML源码。 用法 自定义HTTP Header 获取抓取到的HTML 捕获HTTP异常 获取HTTP响应头等信息 自定义HTTP客户端 QueuryList推荐使用GuzzleHttp来作为HTTP客户端,它功能强大、使用简单、支持异步和并发请求,GuzzleHttp使用文档:http://guzzle-cn.readthedocs.io/zh_CN/latest/