evalor/co-requests

Swoole corountine http client like PHP Requests

1.0.1 2019-02-21 12:55 UTC

This package is auto-updated.

Last update: 2024-04-22 01:31:29 UTC


README

随手封装的不那么自信的HTTP请求库,基于Swoole协程客户端,需要PHP版本7.1+,以及Swoole拓展

安装方法

composer require evalor/co-requests

使用方法

<?php
/**
 * Created by PhpStorm.
 * User: eValor
 * Date: 2019-02-21
 * Time: 03:51
 */

namespace evalor\coRequests;

use evalor\coRequests\Cookie\CoCookieJar;
use evalor\coRequests\Proxy\CoHttpProxy;
use evalor\coRequests\Proxy\CoSocks5Proxy;
use Swoole\Coroutine;

require_once 'vendor/autoload.php';

Coroutine::create(function () {

    $api = 'http://ip.taobao.com/service/getIpInfo.php?ip=116.8.43.185';

    // 可以设置请求代理 Socks5/HTTP
    $httpProxy = new CoHttpProxy('127.0.0.1', 1085);
    $socks5Proxy = new CoSocks5Proxy('127.0.0.1', 1080);

    // 模拟登陆 Response 也会返回 CoCookieJar
    $cookieJar = new CoCookieJar;
    $cookieJar->addCookieStr('H_PS_PSSID=1426_21117_26350_28415_22159; path=/; domain=.baidu.com'); // 字符串风格
    $cookieJar->addCookie('BDSVRTM', 93, 0, '/', '.baidu.com'); // 参数风格

    // 文件上传
    $coPostFile = new CoPostFile;
    $coPostFile->setName('image');
    $coPostFile->setPath('..........');

    $request = new CoRequests($api);
    $coResponse = $request->setProxy($httpProxy)->setProxy($socks5Proxy) // 可以链式操作
        // 请求头设置
        ->setHeader('x-request-with', 'XmlHttpRequest')
        ->setHeaders(['auth-token' => '123456', 'name' => 'value'])
        // 快捷Cookie设置
        ->setCookie('BDSVRTM', 93)
        ->setCookieJar($cookieJar)
        // 支付接口可以证书设置
        ->setSslKeyFile('.........')
        ->setSslCertFile('..........')
        // POST数据和文件上传
        ->setPostData(['name' => 'value'])
        ->setPostFile($coPostFile)
        ->exec();

    $coResponse->hasError(); // 是否请求异常
    $coResponse->getStatusCode(); // 状态码
    $coResponse->getHeaders(); // 全部的header
    $coResponse->getHeader('xxx'); // 获取某个
    $coResponse->parserJson(); // 快速解析JSON响应
    $coResponse->parserXml();  // 快速解析XML响应
    $coResponse->getContent(); // 获取原始响应内容

    // 可以获取到本次请求结束服务器端Set的Cookie 用于下次请求
    $cookieJar = $coResponse->getCookies();
    $request = new CoRequests($api);
    $request->setCookieJar($cookieJar); // 登陆后的状态携带到下个请求

});