workerman/http-client 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

workerman/http-client

Composer 安装命令:

composer require workerman/http-client

包简介

README 文档

README

Asynchronous http client for PHP based on workerman.

  • Asynchronous requests.

  • Uses PSR-7 interfaces for requests, responses.

  • Build-in connection pool.

  • Support Http proxy.

  • Support Socks5 proxy. (include authenticated)

  • Parallel Request. (use 'revolt/event-loop')

Installation

composer require workerman/http-client

Examples

example.php

<?php
use Workerman\Worker;

require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();
$worker->onWorkerStart = function () {
    $http = new Workerman\Http\Client();

    $http->get('https://example.com/', function ($response) {
        var_dump($response->getStatusCode());
        echo $response->getBody();
    }, function ($exception) {
        echo $exception;
    });

    $http->post('https://example.com/', ['key1' => 'value1', 'key2' => 'value2'], function ($response) {
        var_dump($response->getStatusCode());
        echo $response->getBody();
    }, function ($exception) {
        echo $exception;
    });

    $http->request('https://example.com/', [
        'method' => 'POST',
        'version' => '1.1',
        'headers' => ['Connection' => 'keep-alive'],
        'data' => ['key1' => 'value1', 'key2' => 'value2'],
        'success' => function ($response) {
            echo $response->getBody();
        },
        'error' => function ($exception) {
            echo $exception;
        }
    ]);
};
Worker::runAll();

Run with commands php example.php start or php example.php start -d

Optinons

<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
    $options = [
        'max_conn_per_addr' => 128,
        'keepalive_timeout' => 15,
        'connect_timeout'   => 30,
        'timeout'           => 30,
    ];
    $http = new Workerman\Http\Client($options);

    $http->get('http://example.com/', function($response){
        var_dump($response->getStatusCode());
        echo $response->getBody();
    }, function($exception){
        echo $exception;
    });
};
Worker::runAll();

Proxy

require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
    $options = [
        'max_conn_per_addr' => 128,
        'keepalive_timeout' => 15,
        'connect_timeout'   => 30,
        'timeout'           => 30,
        // 'context' => [
        //     'http' => [
        //         // All use '$http' will cross proxy.  The highest priority here. !!!
        //         'proxy' => 'http://127.0.0.1:1080',
        //     ],
        // ],
    ];
    $http = new Workerman\Http\Client($options);

    $http->request('https://example.com/', [
        'method' => 'GET',
        'proxy' => 'http://127.0.0.1:1080',
        //  'proxy' => 'http://user:pass@127.0.0.1:1080',
         // 'proxy' => 'socks5://127.0.0.1:1081',
         // 'proxy' => 'socks5://username:password@127.0.0.1:1081',
        'success' => function ($response) {
            echo $response->getBody();
        },
        'error' => function ($exception) {
            echo $exception;
        }
    ]);
};
Worker::runAll();

Parallel

This feature requires http-client version >= v3.0 . When using the fiber driver, you must install revolt/event-loop.

use Workerman\Worker;
use Workerman\Events\Fiber;
use Workerman\Events\Swoole;
use Workerman\Events\Swow;

require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();
$worker->eventLoop = Fiber::class; // or Swoole::class or Swow::class
$worker->onWorkerStart = function () {
    $http = new Workerman\Http\ParallelClient();

    $http->batch([
        ['http://example.com', ['method' => 'POST', 'data' => ['key1' => 'value1', 'key2' => 'value2']]],
        ['https://example2.com', ['method' => 'GET']],
    ]);
    $http->push('http://example3.com');

    $result = $http->await(false);
    // $result:
    // [
    //     [bool $isSuccess = true, Workerman\Http\Response $response],
    //     [bool $isSuccess = false, Throwable $error],
    //     [bool $isSuccess, Workerman\Http\Response $response],
    // ]

};
Worker::runAll();

License

MIT

workerman/http-client 适用场景与选型建议

workerman/http-client 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 78.23k 次下载、GitHub Stars 达 56, 最近一次更新时间为 2019 年 10 月 21 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 workerman/http-client 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 workerman/http-client 我们能提供哪些服务?
定制开发 / 二次开发

基于 workerman/http-client 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 78.23k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 56
  • 点击次数: 7
  • 依赖项目数: 24
  • 推荐数: 2

GitHub 信息

  • Stars: 56
  • Watchers: 1
  • Forks: 18
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-10-21