首页 > 其他分享 >Guzzle批量请求数据

Guzzle批量请求数据

时间:2023-05-16 19:23:03浏览次数:28  
标签:index 请求 批量 value client state Guzzle key

Guzzle 发起并发请求

方式一 发起固定数量请求

use GuzzleHttp\Client;
use GuzzleHttp\Promise\Utils;


$client = new Client();

// 启动每个请求但不阻止(block)
$promises = [
	'image' => $client->getAsync('http://127.0.0.1:9501/index', ['query' => ['user' => 'image']]),
	'png'   => $client->getAsync('http://127.0.0.1:9501/index', ['query' => ['user' => 'png']]),
	'jpeg'  => $client->getAsync('http://127.0.0.1:9501/index', ['query' => ['user' => 'jpeg']]),
	'webp'  => $client->getAsync('http://127.0.0.1:9501/index', ['query' => ['user' => 'webp']])
];

// 等待请求完成; 如果有请求异常会抛出异常 : RequestException
// 你可以使用 promise 的键来访问每个响应
try {
	$result = Utils::unwrap($promises);
	foreach ($result as $key => $value) {
		$contents = $value->getBody()->getContents();
		$this->line("key:" . $key . ";contents:" . $contents);
	}
} catch (\Throwable $exception) {
	dd($exception);
}

// 等待请求完成,即使其中一些请求已经失败
// {"image":{"state":"fulfilled","value":{}},"jpeg":{"state":"fulfilled","value":{}},"png":{"state":"fulfilled","value":{}},"webp":{"state":"fulfilled","value":{}}}
$responses = Utils::settle($promises)->wait();
foreach ($responses as $key => $value) {
	if ($value['state'] === 'fulfilled') {
		$contents = $value['value']->getBody()->getContents();
		$this->line("key:" . $key . ";contents:" . $contents);
	} elseif ($value['state'] === 'rejected') {
		$this->line("key:" . $key . "请求失败");
	}
}

方式二 发送不确定数量的请求 可以作为接口并发测试

        $client = new Client();

        $requests = function ($total) {
            $uri = 'http://127.0.0.1:9501/landlord';
            for ($i = 0; $i < $total; $i++) {
                yield new Request('GET', $uri);
            }
        };

        $pool = new Pool($client, $requests(100), [
            // 并发发送的最大请求数
            'concurrency' => 5,
            'fulfilled' => function ($response, $index) {
                $this->line(json_encode($response->getBody()->getContents()) . "-index:" . $index);
                // this is delivered each successful response
            },
            'rejected' => function ($reason, $index) {
                $this->line($reason->getMessage() . "-index:" . $index);
                // this is delivered each failed request
            },
        ]);

        // Initiate the transfers and create a promise
        $promise = $pool->promise();

        // Force the pool of requests to complete.
        $promise->wait();

标签:index,请求,批量,value,client,state,Guzzle,key
From: https://www.cnblogs.com/jing1208/p/17406436.html

相关文章

  • PHP使用Guzzle流式下载
    Guzzle流式下载数据/图片useGuzzleHttp\Client;$client=newClient();$response=$client->get('https://baidu.com/?p=%E6%B5%8B%E8%AF%95',['stream'=>true]);$filePath=storage_path("image/".time().".jpg");......
  • vue请求后端数据和跨域问题
    最近遇到的一个问题后端写好的接口,前端怎么获取数据这是我后端的接口:GET接口这是我前端运行的项目地址:简单使用:咱门前端使用颇受好评的axios来发起请求这是它的官网:https://www.axios-http.cn/不过要在vue中使用它,就需要先安装打开终端输入一下命令 npminstall......
  • hibernate 批量插入的测试 转
    Hibernate批量插入的测试:最近在项目中做了一个充值卡的模块,用到了批量插入:我一开始用hibernate插入五十万条数据:选说一下我的记算机配置:内存:1G,CPU:Pentium(R)4CPU3.20GHz.配置应该算是过时的了,我的数据库是:oracle10G,数据库服务器在外地,我测试插入到十万条的时候用了二十五分......
  • mongoDB 批量将某个字段值等于另一个字段值
    将update_time字段的值设置为create_time的值:db.collection_name.find().forEach(function(item){db.collection_name.update({_id:item._id,create_time:{$exists:true}},{$set:{update_time:item.create_time}})}......
  • C# HttpClient发送Get和Post请求
     HttpClient发送Get和Post请求 publicclassHttpHelper{///<summary>///发起POST同步请求//////</summary>///<paramname="url"></param>///<paramname="postData&q......
  • 阿里图标库批量下载iOS适配的图标
    没有UI设计师精湛的技艺,很难设计出符合业务场景的图标,作为开发,确实拙计。练手的项目可以完全可以降低标准,不必达到看图识意,生产上在再请专业UI出图也不失是一个好的方案。阿里巴巴矢量图标库,就给了我们极大方便,......
  • python-flask 技能点使用-03 请求钩子实现审计日志
    场景分析     使用pythonflask开发web系统,该系统是基于用户认证鉴权的web系统,系统中涉及到关键数据的操作,因此需要针对业务操作进行记录(也就是审计日志),便于管理员后期查看,在基于java的Spring系列框架中我们可以借助于AOP面向切面的编程来完成,在使用Flask时可以借助......
  • python-flask 技能点使用-01 请求钩子
    场景分析     熟悉java开发的小伙伴应该了解Spring全生命周期以及配套的一系列方法,熟悉Vue开发的小伙伴们应该也熟悉Vue生命周期管理以及一系列方法,使用过Servlet的小伙伴也应该了解其生命周期的概念,本人之前一直从事java开发,现在因为业务需要需要学习python开发,目前......
  • 批量备份docker镜像
    首先,停止所有正在运行的容器dockerstop$(dockerps-a-q)列出所有停止的容器ID并写入list.txt文件dockerps-a--filter"status=exited"-q>list.txt编写bash脚本并运行#!/bin/bashwhilereadcontainer_id;doecho"Exportingcontainer$container_id..."......
  • 小程序优化之旅(三) -- 请求缓存与预请求优化
    一、预请求概念首先在一开始还是先明确下这里所提及到的“预请求”的概念和常规的http的options请求有所区别,这篇文章所涉及到的预请求的概念都是在页面切换时候的页面请求的提请发送,跳转进入新页面后能够快速的获取到服务端的数据。1.1预请求的业务含义为啥需要要做这个......