guzzle/guzzle 日常使用

Guzzle PHP HTTP客户端使用 什么是guzzle 安装Guzzle Guzzle基本使用 List item 一.什么是guzzle Guzzle是一个PHP HTTP客户端,可以轻松发送HTTP请求,并且可以轻松集成Web服务。 二.安装Guzzle 1.使用composer安装 composer require guzzlehttp/guzzle 2.或者编辑项目的composer.json文件,添加Guzzle作为依赖 { "require": { "guzzlehttp/guzzle": "~6.0" . 阅读详情

Guzzle

Guzzle 是一个 PHP HTTP 客户端,致力于让发送 HTTP 请求以及与 Web 服务进行交互变得简单。
Github:https://github.com/guzzle/guzzle
Composer:https://packagist.org/packages/guzzlehttp/guzzle

发送请求

use GuzzleHttp\Client;

$client = new Client([
    //跟域名
    'base_uri' => 'http://localhost/test',
    // 超时
    'timeout'  => 2.0,
]);

$response = $client->get('/get'); //http://localhost/get
$response = $client->delete('delete');  //http://localhost/get/delete
$response = $client->head('http://localhost/get');
$response = $client->options('http://localhost/get');
$response = $client->patch('http://localhost/patch');
$response = $client->post('http://localhost/post');
$response = $client->put('http://localhost/put');

POST

$response = $client->request('POST', 'http://localhost/post', [
    'form_params' => [
        'username' => 'webben',
        'password' => '123456',
        'multiple' => [
            'row1' => 'hello'
        ]
    ]
]);

响应

# 状态码
$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK

# header
// Check if a header exists.
if ($response->hasHeader('Content-Length')) {
    echo "It exists";
}

// Get a header from the response.
echo $response->getHeader('Content-Length');

// Get all of the response headers.
foreach ($response->getHeaders() as $name => $values) {
    echo $name . ': ' . implode(', ', $values) . "\r\n";
}

# 响应体
$body = $response->getBody();
// Implicitly cast the body to a string and echo it
echo $body;
// Explicitly cast the body to a string
$stringBody = (string) $body;
// Read 10 bytes from the body
$tenBytes = $body->read(10);
// Read the remaining contents of the body as a string
$remainingBytes = $body->getContents();

自定义header

// Set various headers on a request
$client->request('GET', '/get', [
	//header
    'headers' => [
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz']
    ],
    //下载
	'save_to'=> $filename,
	//referer
	'allow_redirects' => [
		'referer'		=> '',
	],
]);

cookie 访问

$client = new \GuzzleHttp\Client();

$url = 'https://www.baidu.com/getUserInfo';

$jar = new \GuzzleHttp\Cookie\CookieJar();
$cookie_domain = 'www.baidu.com';
$cookies = [
	'BAIDUID' 	=> '221563C227ADC44DD942FD9E6D577EF2CD',
];

$cookieJar = $jar->fromArray($cookies, $cookie_domain);

$res = $client->request('GET', $url, [
       'cookies' => $cookieJar,
       // 'debug' => true,
]);
$body = $res->getBody();

手册地址:http://docs.guzzlephp.org/en/stable/request-options.html#headers

爬虫脚本

include './vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;

class Metting{

    private $client;
    /**
     * 可以有多个候选,防止会议室被提前预定。
     * 预定成功自动break
     **/
    public $rooms = [
        195 => '阿基米德',
        196 => '费曼',
        203 => '特斯拉',
        202 => '爱因斯坦',
        188 => '牛顿',
    ];
    public $time_start  = '15:00';
    public $time_end    = '16:30';

    /**
     * tip 从Charles复制过来的是utf8需要转码
     **/
    private $cookies = [
        'xdf_openid'  => 'ktxPYw7mXiAFvoTno8yIVZUXo7FkahPMQMpXvqrH0q0=',
    ];

    public $base_uri        = 'http://smr.xdf.cc/';
    public $submit_uri      = '/bespoke/Bespoke/addSaveAPP/';
    public $lock_uri        = '/bespokepc/Index/addSavePCMeeting/';
    public $cookie_domain   = 'smr.xdf.cc';
    // 员工ID
    public $staffid         = 10000;
    //public $base_uri      = 'http://127.0.0.1:1999/';
    //public $lock_uri      = '/metting/lock';
    //public $submit_uri    = '/metting/submit';
    //public $cookie_domain = '127.0.0.1:1999';

    public function __construct()
    {
        $cookieJar = CookieJar::fromArray( $this->cookies, $this->cookie_domain);
        $this->client = new Client([
            'base_uri'  => $this->base_uri,
            'timeout'   => 5,
            'cookies'    => $cookieJar,
            'headers'    => [
                'User-Agent' => $this->user_agent,
            ],
        ]);
    }

    public function run(){
        $day = date('Y-m-d',strtotime('+1 day'));
        foreach( $this->rooms as $roomid => $roomname){
            $lockid = $this->lock( $roomid, $day);
            if( $lockid > 0){
                $ret = $this->submit( $lockid, $roomid, $day);
                if( $ret){
                    break;
                }
            }
            usleep(10*1000);
        }
    }

    /**
     * 锁定成功返回lockid,失败(被别人预定)为0,有其他异常可能未处理
     * lock 接口未限制权限,也可以用postman模拟
     **/
    public function lock( $roomid, $day){
        //$uri = '/metting/lock';
        $data = [
            'day'       => $day,
            'start'     => $this->time_start,
            'end'       => $this->time_end,
            'roomid'    => $roomid,
        ];
        print_r( $data);
        $resp = $this->client->request('POST', $this->lock_uri,[
            'form_params' => $data
        ]);
        $body = (string) $resp->getBody();
        return $body;
    }

    public function submit( $lockid, $roomid, $day){
        //$uri = '/metting/submit';
        $data = [
            'theme'         => '研发周会',
            'content'       => '',
            'renshu'        => 1,
            'emailstr'      => '',
            'mail_rili'     => [0 => 1, 1=>1],
            'canjiaemail'   => '',
            'canjiastaff1'  => '',
            'canjiastaff'   => $this->staffid,
            'appointID'     => 0,
            'roomid'        => $roomid,
            'appORweb'      => 0,
            'keyuyue'       => $this->time_start.'~'.$this->time_end,
            'day'           => $day,
            'urgent'        => 0,
            'meetID'        => $lockid
        ];
        $resp = $this->client->request('POST', $this->submit_uri, [
            'form_params' => $data
        ]);
        print_r( $data);
        $body = $resp->getBody()->getContents();
        print_r( $body);
        $array = json_decode( $body, true);
        print_r( $array);
        if( $array['ed4'] == 200){
            return true;
        }
        return false;
    }
    private $user_agent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/18D52 AliApp(DingTalk/6.0.10) com.laiwang.DingTalk/14684863 Channel/201200 language/zh-Hans-CN UT4Aplus/0.0.6 WK';
}
$obj = new Metting();
$obj->run();
guzzle请求重试 Guzzle是一个PHP的HTTP客户端,可以发送同步或异步的请求,中间件系统允许你创建构成客户端行为。 在网络不稳定或者其他一些原因导致会偶现请求失败的情况,所以就需要根据一定规则进行请求重试 而本文中请求重试就是利用中间件系统实现的。 使用php的trait特性 use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request; use GuzzleHttp... 阅读详情

相关推荐

guzzle 使用 json 作为主体请求接口

在使用第三方插件 Guzzle 请求微信素材管理接口: 接口说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN #参数 { "type":TYPE, "offset":OFFSET, "count":COUNT ...

钚该钚想 2506

laravel8使用GuzzleHttp\Client类发起各类请求示例

laravel8 中的GuzzleHttp\Client类,发起get/post请求,以各种方式参数,获取数据。

kirsten_z的博客 2576

PHP 使用 Guzzle 执行 HTTP 请求

PHP 使用 Guzzle 执行 HTTP 请求

wgchen 2513

PHP使用GuzzleHttp进行HTTP请求

2,设置过期时间和跳过ssl验证。3,post请求 :json。1,composer安装。3,delete请求。

zhouchang111的博客 3198

guzzle:Guzzle,一个可扩展PHP HTTP客户端

Guzzle,PHP HTTP客户端 Guzzle是一个PHP HTTP客户端,可以轻松发送HTTP请求并轻松与Web服务集成。 简单的界面,用于构建查询字符串,POST请求,流式传输大型上传文件,流式传输大型下载文件,使用HTTP cookie,上传JSON数据等。 可以使用同一接口发送同步和异步请求。 使用PSR-7接口处理请求,响应和流。 这使您可以在Guzzle中使用其他PSR-7兼容的库。 支持PSR-18,允许其他PSR-18 HTTP客户端之间的互操作性。 提取底层的HTTP传输,使您可以编写环境并传输不可知的代码; 即,对cURL,PHP流,套接字或非阻塞事件循环没

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

guzzlehttp/guzzle使用

中文文档: https://guzzle-cn.readthedocs.io/zh_CN/latest/overview.html GITHUB:https://github.com/guzzle/guzzle/ 简介:Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. 安装: composer require guzzlehttp.

codipy的博客 1655

炼丹-Pyecharts: JupyterLab无法render_notebook

炼丹-Pyecharts: JupyterLab无法render_notebook问题描述Jupyter-Lab 环境下render_notebook显示空白 问题描述Jupyter-Lab 环境下render_notebook显示空白 首先需要使用pyecharts自带的config来申明一下使用pyecharts的运行环境 from pyecharts.globals import Curre...

MichaelZzzzz的博客 4687

php使用guzzlehttp/guzzle进行数据采集

php使用guzzlehttp/guzzle进行数据采集一、需求目的1、采集某个平台网站的数据2、将采集回来的数据与本身平台系统的现有数据汇总二、实现步骤1、分析平台网站2、确定方案3、封装功能类4、使用功能类进行后续处理三、具体实现开启数据抓取脚本开启数据同步脚本界面展示 一、需求目的 1、采集某个平台网站的数据 2、将采集回来的数据与本身平台系统的现有数据汇总 二、实现步骤 1、分析平台网站 ...

xzw1315915745的博客 4961

MATLAB R2022b 安装教程

1. 下载安装先放资源链接,百度网盘太贵了不想续了,换了夸克网盘。1. 下载安装。

qq_51654158的博客 2万+

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 136

php guzzle并发,使用Guzzle并发请求接口

最近在重构官网,为了支持SEO,整个项目的结构从采用AngularJs的单页面应用结构回归到PHP服务端渲染。问题来了:之前统一调用接口可以保证三端(APP,PC和移动web端)数据同步,现在如果是单独为PC端写一套业务逻辑,需要花费大量的时间精力,且后期维护可能比较困难(需要维护两处)。因此为了最大程度上保证数据同步,决定在通过服务器中转请求原始数据接口,然后渲染页面。经过筛选最终选定了Guzz...

weixin_36242784的博客 2494

点云处理指南介绍

指南目录,Open3D与PCL内容介绍

NNNNNathan的博客 1万+

guzzle的cookie使用方法

今天使用guzzle,把cookie写到了header里,发现服务端接收不到,然后查看了下guzzle的文档,对于cookie的使用介绍如下图: 看完还是不知道怎么设置cookie,如是查了下: use GuzzleHttp\Cookie\CookieJar; $cookieJar = CookieJar::fromArray([ 'PHPSESSID' => '...

小白成神路 8960

Yolov8-pose关键点检测:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物等检测精度

LRM loss应用到能够大幅提升pose遮挡物性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1713

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 使用与 OpenAI 兼容的格式,可以通过修改配置使用 OpenAI SDK。生成的 API Key 只会显示一次,请妥善保存。注册并登录账号,进入左侧导航栏的。创建 API Key。

blues_C的博客 1万+

php guzzle的基本使用

Guzzle 自定义header的使用Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件。Guzzle介绍Post/Get请求自定义headercookie 访问查看返回状态和返回信息 Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件。 Guzzle介绍 简单的接口构建qu...

qq_33408702的博客 2889

〔重庆理工大学〕计算机网络实验指导书【实验九 直连路由,静态路由,默认路由配置】

本实验指导书介绍了直连路由、静态路由和默认路由的配置方法。主要内容包括:1)路由器基础知识,包括直连路由、静态路由和动态路由三种路由生成方式;2)路由度量值与匹配顺序,解释了不同路由类型的优先级;3)实验任务分为三个部分:直连路由的查看分析、静态路由的配置以及默认路由的配置,详细说明了配置步骤和命令。实验要求通过模拟器搭建网络环境,完成路由配置使PC间能够互通。实验旨在帮助学生掌握不同路由类型的工作原理和配置方法,适用于简单的网络环境。

Pretty Boy Fox的博客 1054

Laravel 使用Guzzle执行HTTP请求

手册地址:http://docs.guzzlephp.org/en/stable/request-options.html#headers Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。Guzzle提供了简单的接口,构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。 安装 使用Composer安装: composer require guzzlehttp/guzzle 或者编辑项目的comp...

JineD的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Guzzle/promises源码解读

最近在读guzzle/promise的源码,觉得有点绕,所以这里记录一下。 promise介绍 promise是一个异步操作的标准,它规定了应当如何写一系列相关的异步操作,主要目的是规范化异步操作,避免大量的异步操作导致的回调地域。 Guzzle中的promise promise是如何规范异步操作的 异步操作的状态只有三种:pending-等待,fulfilled-成功,rejected-失败 异步状态的变化只有两种:pending->fullfilled,pending->rejecte.

书山路遥 1339

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Guzzle Cache Middleware 使用教程

Guzzle Cache Middleware 使用教程 项目介绍 Guzzle Cache Middleware 是一个用于 Guzzle 6 及以上版本的 HTTP 缓存中间件。它旨在提供 RFC 7234 合规性、性能和透明度。通过简单的中间件添加到 Guzzle 的 HandlerStack 中,可以显著提高 HTTP 请求的效率。 项目快速启动 安装 首先,通过 Composer 安装 ...

gitblog_00415的博客 842

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

php guzzle,在PHP中实现使用Guzzle执行POST和GET请求

以往在项目中要用到第三方接口时会用到封装好的curl执行请求,现在有了更好的解决方案——Guzzle。下面是官方介绍:Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。发送同步或异步的请求均使用相同的接口。使用PSR-7接口来请求、响应、分流,允...

weixin_33533797的博客 2611

guzzle php,PHP网络请求插件Guzzle使用

在写后台代码时,避免不了需要与其他第三方接口交互,如向服务号下发模板消息,有时可能需要下发超过 10 万条。这时不得不考虑使用异步和「多线程」的网络请求。今天向 PHP 工程师们推荐一个 Guzzle 插件。GuzzleGuzzle 是一个 PHP 的 HTTP 客户端,用来轻而易举地发送请求,并集成到我们的 WEB 服务上。接口简单:构建查询语句、POST 请求、分流上传下载大文件、使用 HTT...

weixin_31162865的博客 802

【TP5】安装Guzzle并简单使用

Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。 安装 看到文档的安装方式会不知道怎么弄,因为composer安装列表没有下载方式 (1)打开项目的composer.json文件,添加GuzzleHttp这个安装包 (2)执行composer update (3)然后项目就有了 使用Guzzle...

咔咔博客 5315

Guzzle 使用文档

GuzzleHttp请求第三方https接口报错。2. 发起 Post 请求。4. 使用 Cookie。

m0_69254007的博客 2825

php guzzle 上传文件,php – 使用Guzzle 6将文件上传到API端点

我可以使用Postman将文件上传到API端点.我试图将其转换为从表单上传文件,使用Laravel上传并使用Guzzle 6发布到端点.它在Postman中的样子截图(我故意省略了POST URL) 下面是您在POSTMAN中单击“生成代码”链接时生成的文本:POST /api/file-submissions HTTP/1.1Host: strippedhostname.comAuthoriza...

weixin_42532938的博客 731
上一篇: Composer 常用包
下一篇: laravel Route 用法
Webben
博客等级 码龄10年 19粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值