总结:
1.GUZZLE包最终还是用的curl的curl_exec和curl_multi_exec去请求,可以添加自定义配置,这些配置最终还是会对应到 curl_setopt_array($easy->handle, $conf); 设置
2.还有一个就是可以做一些请求前或者请求返回后的中间件。介入请求的过程中处理$stack = new HandlerStack(); push,handler进去
//使用默认配置去构建客户端$client = new Client();//设置CURL,使用去构建客户端$client = new \GuzzleHttp\Client(['curl' => [CURLOPT_SSL_VERIFYPEER => false,CURLOPT_SSL_VERIFYHOST => 1,]]);//代理设置$proxy = [//http域名代理'http' => config('app.fileserver_proxy') . ':' . config('app.fileserver_port'), // Use this proxy with "http"//https域名代理'https' => config('app.fileserver_proxy') . ':' . config('app.fileserver_port'), // Use this proxy with "https",//不需要代理的域名'no' => ''];$response = $client->request('GET','https://www.baidu.com', ['proxy' => $proxy]);//异步请求,要用wait才能返回$promise = $client->requestAsync('GET', 'https://www.baidu.com');$promise = $promise->then(function (ResponseInterface $res) {dd($res->getBody());echo $res->getStatusCode() . "\n";},function (RequestException $e) {dd($e);echo $e->getMessage() . "\n";echo $e->getRequest()->getMethod();})->wait();dd($promise);function add_response_header($header, $value){return function (callable $handler) use ($header, $value) {return function (RequestInterface $request,array $options) use ($handler, $header, $value) {$promise = $handler($request, $options)return $promise->then(function (ResponseInterface $response) use ($header, $value) {return $response->withHeader($header, $value);});}};}$stack = new HandlerStack();$stack->setHandler(new CurlHandler());$stack->push(add_response_header('X-Foo', 'bar'));$client = new Client(['handler' => $stack]);

$conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
                return $body->read($length);
            };

读取本地文件句柄流,提供POST数据, 可以解决那些大文件上传的, 另外一种方案就是切割成多个小文件上传。

番外:

可以设置CURLOPT_READFUNCTION 和CURLOPT_READDATA选项来为POST提供数据,同时,不能再设置CURLOPT_POSTFIELDS选项。当使用callback函数来提供数据时,一定要使用大块数据传输编码(chunked transfer-encoding)或者用CURLOPT_POSTFIELDSIZE 或CURLOPT_POSTFIELDSIZE_LARGE选项设置数据大小。chunked transfer-encoding可以用CURLOPT_HTTPHEADER来设置字段。

private function applyBody(RequestInterface $request, array $options, array &$conf){$size = $request->hasHeader('Content-Length')? (int) $request->getHeaderLine('Content-Length'): null;// Send the body as a string if the size is less than 1MB OR if the// [curl][body_as_string] request value is set.if (($size !== null && $size < 1000000) ||!empty($options['_body_as_string'])) {$conf[CURLOPT_POSTFIELDS] = (string) $request->getBody();// Don't duplicate the Content-Length header$this->removeHeader('Content-Length', $conf);$this->removeHeader('Transfer-Encoding', $conf);} else {$conf[CURLOPT_UPLOAD] = true;if ($size !== null) {$conf[CURLOPT_INFILESIZE] = $size;$this->removeHeader('Content-Length', $conf);}$body = $request->getBody();if ($body->isSeekable()) {$body->rewind();}$conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {return $body->read($length);};}// If the Expect header is not present, prevent curl from adding itif (!$request->hasHeader('Expect')) {$conf[CURLOPT_HTTPHEADER][] = 'Expect:';}

PHP Guzzle包 用法相关推荐

  1. Python中的解包用法

    Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...

  2. python解包什么意思_python解包用法详解

    对于一堆资料,我们可以把它分给不同的人使用,这个分散的过程,我们可以看成是解包方法是实现.当然实际python解包的使用会相对复杂一点,我们会对常见的列表.函数等进行操作.下面我们就Python解包的 ...

  3. guzzlehttp/guzzle 包设置超时

    laravel 框架 guzzlehttp/guzzle包设置超时 摘要:GuzzleHttp\Client 在readme.txt文件没有详细说明它的配置参数,需要配置http请求超时的进. 直接上 ...

  4. Oracle之DBMS_SQL包用法详解

    Oracle之DBMS_SQL包用法详解 原文  http://zhangzhongjie.iteye.com/blog/1948093 通常运用 DBMS_SQL 包一般分为 如下 几步: 1. o ...

  5. npm命令--安装依赖包--用法/详解

    原文网址:npm命令--安装依赖包--用法/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍npm如何安装依赖包. 用法 命令 作用 详述 npm install <pkg> //同 ...

  6. python 包用法_Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 这篇文章主要介绍了 Python 基础教程之包和类的用法的相关资料, 需要的朋友可以参考下 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido ...

  7. netpref 使用_golang中net包用法(一)

    net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket.尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial ...

  8. python模块和包用法详解(__all__)

    1. 模块         Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句.         模块能定义函数,类和变 ...

  9. php_os用法,golang中os包用法

    os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...

最新文章

  1. centos让yum自动选择最快的源
  2. MongoDB工具介绍
  3. 《BI那点儿事》数据挖掘初探
  4. html5的canvas绘制时钟
  5. 数据库-MySQL中间的注释
  6. 电话拨号器java_Android基础--电话拨号器
  7. java多线程-生产者消费者模式
  8. 动态规划之01背包问题(最易理解的讲解)
  9. 内含资源下载|久等了!阿里云技术天团15位专家总结双11实战经验
  10. 使用Flutter开发一个仿微信飞机大战游戏
  11. 数据科学家成长指南(上)
  12. Windows系统MySQL免安装下载配置
  13. 联想推出专为边缘和数据密集型工作负载而设计的单插槽服务器
  14. 超详细的单摄→双摄→三摄→3D成像摄像头产业链
  15. 快递驿站取件管理系统|基于SpringBoot的快递栈系统设计与实现
  16. Android的一些开源项目集锦 以备以后研究
  17. 别找了,完整代码在这||校园导游咨询系统
  18. 反垃圾邮件软件_Linux中Postfix反病毒和垃圾邮件工具(十)
  19. 清华计算机本科 课表
  20. 泛函分析 01.04 距离空间-闭集、可分性、列紧性

热门文章

  1. 定义域是取交集吗_定义域是交集还是并集
  2. python调用ansys fluent_基于ANSYS FLUENT的两相流分析例1
  3. 按头安利 好看又实用的店招电商设计模板素材看这里
  4. PS图片基础知识及常用工具介绍
  5. 物联网竞赛-基于CC2530寄存器开发-基础知识学习
  6. 泰国推进数字货币征税法案,菲律宾对数字货币宽容 | 区块链日报
  7. 自己验证的一片扯淡的骨架提取论文
  8. 超全前端面试题及答案
  9. 逻辑为基、数企赋能(NO.14)—金字塔快速表达
  10. 语音mos测试软件,Pilot Pioneer3.6软件MOS语音测试简易指导书.doc