高效使用 Guzzle:POST 请求与请求体参数的最佳实践

亿牛云代理.png

介绍

在现代爬虫技术中,高效发送 HTTP 请求并处理响应数据是关键步骤之一。Guzzle 是一个强大的 PHP HTTP 客户端,广泛应用于发送同步和异步请求。本文将介绍如何使用 Guzzle 发送 POST 请求,特别是如何传递请求体参数,并结合代理 IP 技术实现高效的数据抓取。同时,我们将分析 Guzzle 对同步和异步请求的不同处理方式。

技术分析

1. Guzzle 基础知识
Guzzle 提供了一个简单的接口来发送 HTTP 请求,并支持多种选项,如 JSON 数据传递、错误处理、并发请求等。首先,我们需要确保 Guzzle 已正确安装:

composer require guzzlehttp/guzzle

2. 发送 POST 请求
使用 Guzzle 发送 POST 请求时,可以通过 json 选项来传递请求体参数。下面的示例展示了如何使用 Guzzle 发送一个包含 JSON 数据的 POST 请求:

use GuzzleHttp\Client;$client = new Client();
$url = 'https://example.com/api/endpoint';$data = ['payItemId' => 'S-112-948-MTNMOMO-20052-200040001-1','amount' => 1000,
];$response = $client->post($url, ['json' => $data,
]);$body = $response->getBody()->getContents();
$result = json_decode($body, true);

3. 使用代理 IP
为了避免被封禁,爬虫程序常使用代理 IP 技术。以下代码展示了如何使用亿牛云爬虫代理来发送请求:

use GuzzleHttp\Client;$client = new Client();
$url = 'https://example.com/api/endpoint';
// 使用亿牛云爬虫代理 www.16yun.cn
$proxy = 'http://username:password@$proxy.16yun.cn:12345'; $data = ['payItemId' => 'S-112-948-MTNMOMO-20052-200040001-1','amount' => 1000,
];$response = $client->post($url, ['json' => $data,'proxy' => $proxy, // 设置代理 IP
]);$body = $response->getBody()->getContents();
$result = json_decode($body, true);

4. Guzzle 的同步和异步处理
Guzzle 提供了对同步和异步请求的支持,这使得它在处理大量请求时非常灵活。

  • 同步请求:同步请求是指程序在发送请求时会等待响应返回后再继续执行。它适用于需要逐步处理每个请求结果的场景。
use GuzzleHttp\Client;$client = new Client();
$url = 'https://example.com/api/endpoint';$response = $client->get($url);
$body = $response->getBody()->getContents();
echo $body;
  • 异步请求:异步请求允许程序在发送请求后立即继续执行,不必等待响应返回。它适用于需要同时发送大量请求的场景。
use GuzzleHttp\Client;
use GuzzleHttp\Promise\PromiseInterface;$client = new Client();
$url = 'https://example.com/api/endpoint';$promise = $client->getAsync($url);
$promise->then(function (ResponseInterface $response) {echo $response->getBody()->getContents();},function (RequestException $e) {echo $e->getMessage();}
);$promise->wait(); // 等待所有异步请求完成

5. 实战示例:采集新闻网站数据
以下示例展示了如何使用 Guzzle 和亿牛云爬虫代理来采集多个新闻网站的数据:

use GuzzleHttp\Client;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;$client = new Client();
// 使用亿牛云爬虫代理 www.16yun.cn
$proxy = 'http://username:password@$proxy.16yun.net:12345';$urls = ['https://news.ycombinator.com/','https://www.bbc.com/news','https://www.cnn.com/',
];$requests = function ($urls) {foreach ($urls as $url) {yield new Request('GET', $url);}
};$pool = new Pool($client, $requests($urls), ['concurrency' => 5,'options' => ['proxy' => $proxy, // 设置代理 IP],'fulfilled' => function ($response, $index) {// 请求成功时的处理逻辑$body = $response->getBody()->getContents();echo "Response from index {$index}: " . substr($body, 0, 100) . "\n";},'rejected' => function ($reason, $index) {// 请求失败时的处理逻辑echo "Request {$index} failed: {$reason}\n";},
]);$promise = $pool->promise();
$promise->wait();
结论

本文介绍了如何使用 Guzzle 发送 POST 请求并传递请求体参数,以及如何结合代理 IP 技术实现高效的爬虫数据抓取。通过实际代码示例,我们展示了如何采集多个新闻网站的数据。同时,我们分析了 Guzzle 对同步和异步请求的不同处理方式。Guzzle 的灵活性和强大的功能使其成为 PHP 开发中不可或缺的工具。希望本文能为您在实际项目中使用 Guzzle 提供参考和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【风力发电】风力涡轮机模型搭建

目录 引言风力涡轮机数学原理风力涡轮机matlab仿真引言 风力发电领域仿真主要包含风力涡轮机模型、PMSM模型与控制算法,控制对象模型的建立是研究的基础,其中风力涡轮机的仿真则是第一步。为保证后续研究的严谨性,本文将针对《An Improved Mechanical Sensorless Maximum Po…

【Python】Python的安装与环境搭建

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言Python下载环境配置测试环境变量是否配置成功配置环境变量 运行Python交互式解释器:命令行脚本集成开发环境(IDE:Integrated Development E…

检测水管缺水的好帮手-管道光电液位传感器

管道光电液位传感器是现代清水管道管理中的重要技术创新,不仅提高了检测液位的精确度,还解决了传统机械式和电容式传感器存在的诸多问题,成为检测管道缺水的可靠利器。 该传感器采用先进的光学感应原理,利用红外光学组件通过精密…

【vite创建项目】

搭建vue3tsvitepinia框架 一、安装vite并创建项目1、用vite构建项目2、配置vite3、找不到模块 “path“ 或其相对应的类型声明。 二、安装element-plus1、安装element-plus2、引入框架 三、安装sass sass-loader1、安装sass 四、安装vue-router-next 路由1、安装vue-router42搭…

labview技巧——AMC框架安装

AMC工具包的核心概念是队列,队列是一种先进先出(FIFO,First In First Out)的数据结构,适用于处理并发和异步任务。在LabVIEW中,队列可以用于在不同VI之间传递数据,确保消息的有序处理&#xff0…

你觉得胡锡进还能回本吗?还能融资买纳指?

7月3日,胡锡进发布最新炒股日记:这几天的股票表现总体很差,除了今天,之前连续几天都输给了沪指,因此虽然今天我只赔了546元,但#胡锡进总亏损达到8.5万#。这是我今年一月份2800点以下时的亏损额。胡锡进称已…

如何快速选择短剧系统源码:高效构建您的在线短剧平台

在数字化时代,短剧作为一种新兴的娱乐形式,受到了广泛的欢迎。随着市场需求的增长,构建一个在线短剧平台成为了很多创业者和开发者的目标。而选择正确的短剧系统源码则是实现这一目标的关键步骤。本文将为您提供一些实用的指导,帮…

25届最近5年华北电力大学自动化考研院校分析

华北电力大学(北京保定) 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指…

如何在 Selenium Python 中解决验证码 | 2024 完整指南

由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计,对于使用Selenium进行网络爬虫或自动化任务而言,无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案,帮助您高…

工作常用英文术语

在工作环境中,英文术语的使用非常普遍。以下是一些常用的工作英文术语,涵盖了不同的领域和场景: 会议与沟通: Meeting: 会议 Agenda: 会议议程 Presentation: 演示 Feedback: 反馈 Brainstorming: 头脑风暴 Collaboration: 合作…

ios-实验室暑假培训(1)

一 组队 在正式培训之前,也是数模比赛的众中之重。 一定要商讨好组队的相关事宜!要求建模/编程/写作/写作三方能力交叉! 而这三个当中,决定比赛拿奖上限的是编程手,决定比赛能不能拿奖的是写作手。而建模的更像是一个…

mac上挂载linux目录

在 macOS 上挂载 CentOS 目录步骤: 在挂载前确保 macOS 和 CentOS 在同一个局域网内,并且可以相互访问。如果有网络配置问题,可能会导致挂载失败或连接被拒绝的错误。 要在 macOS 上将 CentOS 的 /disk2/go 目录通过 NFS 挂载到 /Users/zon…

亚信科技Java后端实习面试复盘

1.自我介绍 2.拷问项目 2.1 看你做了两个项目了,简单介绍一下你这两个项目 2.2 讲一下这点评项目是如何实现的秒杀功能 2.3 讲一下这竞拍系统的核心功能 2.3 项目有使用SQL脚本吗 2.4 竞拍项目是合作完成的吗 3.询问技术掌握情况 3.1 说一下Spring的常用注解 3.2 说…

css的长度单位详解

css的长度单位详解 绝对长度单位相对长度单位 CSS 长度单位用于指定数值的大小,例如,用于设置元素的宽度、高度、边距、边框大小等。CSS 长度单位主要分为两类:相对长度单位和绝对长度单位。 绝对长度单位 在 CSS 中,绝对单位是…

巴图自动化PN转Modbus RTU协议转换网关模块快速配置

工业领域中常用的通讯协议有:Profinet协议,Modbus协议,ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CanOpen等,它们在自动化…

使用Scrapy进行网络爬取时的缓存策略与User-Agent管理

缓存策略的重要性 缓存策略在网络爬虫中扮演着至关重要的角色。合理利用缓存可以显著减少对目标网站的请求次数,降低服务器负担,同时提高数据抓取的效率。Scrapy提供了多种缓存机制,包括HTTP缓存和Scrapy内置的缓存系统。 HTTP缓存 HTTP缓…

飞书机器人:企业级自动化办公的智能助手

在数字化转型的浪潮中,企业办公自动化成为提升工作效率的关键。飞书机器人以其强大的自动化功能,为企业提供了一个智能、高效的办公管理解决方案。 引言 随着企业规模的扩大和业务的复杂化,传统的办公方式逐渐显得力不从心。飞书机器人通过…

ueditor集成秀米编辑器

ueditor集成秀米编辑器 一、背景二、集成秀米编辑器流程2.1、新增秀米插件的按钮,显示在我们的富文本编辑器上2.2、点击该按钮,可以呼出一个iframe,这个iframe引用的是秀米自己的编辑器页面2.3、要是有图片,需要再修改配置哈2.4、…

tkinter给按钮设置背景图片

tkinter给按钮设置背景图片 效果代码 效果 代码 import tkinter as tk from PIL import Image, ImageTk# 创建主窗口 root tk.Tk() root.title("按钮背景图片示例")# 加载图片 image Image.open("new.png") photo ImageTk.PhotoImage(image)# 创建按钮…

【代码随想录】【算法训练营】【第58天】 [卡码101]孤岛的总面积 [卡码102]沉没孤岛 [卡码103]水流问题 [卡码104]建造最大岛屿

前言 思路及算法思维,指路 代码随想录。 题目来自 卡码网。 day 58,周四,ding~ 题目详情 [卡码101] 孤岛的总面积 题目描述 卡码101 孤岛的总面积 解题思路 前提: 思路: 重点: 代码实现 C语言 […