【Delphi 爬虫库 1】GET和POST方法

文章目录

    • 1.最简单的Get方法实现
    • 2.可自定义请求头、自定义Cookie的Get方法实现
    • 3.提取响应协议头
    • 4.Post方法实现单词翻译

爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时,可以选择自己烹饪食物、外出就餐,或者订外卖一样。在编程中,使用 GET 和 POST 方法可以根据需求获取信息。

在 Delphi 中,有许多控件可以实现 GET 和 POST 方法,例如 Indy 组件等。然而,由于 Indy 组件庞大且使用起来不是很方便,在多线程环境下容易出现崩溃等问题。因此,我重新封装了 WinInet 单元,以更方便、快捷地实现 GET 和 POST 方法。

1.最简单的Get方法实现

下面的代码实现了返回百度的首页源代码:

// 返回百度首页源码
procedure TForm1.Button1Click(Sender: TObject);
varstrResponse: AnsiString;
beginstrResponse:= InetHttp(Edit1.Text);Memo4.Text:= UTF8Decode(strResponse);
end;

这里InetHttp是重载函数,不但可以返回字符串,也可以返回流或者直接下载文件到本地,如果需要获取图片那么返回流会更方便。

function InetHttp(const AURL: string; Stream: TStream; APost: TStrings = nil): Boolean; overload;
function InetHttp(const AURL: string; APost: TStrings = nil): AnsiString; overload;
function InetHttp(const AURL: string; FileName: string; APost: TStrings = nil): Boolean; overload;

2.可自定义请求头、自定义Cookie的Get方法实现

在上面的示例中展示了最基本的 GET 请求,但在许多情况下,我们需要自定义请求头,因为有时对方服务器会对请求头进行检测。通常,我们会先进行抓包,然后将抓取到的请求头发送出去。

重新修改代码,让其支持自定义请求头

procedure TForm1.Button1Click(Sender: TObject);
varstrResponse: AnsiString;http: THTTP;Url: string;Header: string;
beginUrl := Edit1.Text;if not CheckBox1.Checked thenbeginstrResponse := InetHttp(Url);Memo4.Text := UTF8Decode(strResponse);endelsebeginhttp := THTTP.Create;tryif CheckBox2.Checked thenhttp.NoCookie:= True;http.HttpRequestHeaders.Text := Memo1.Text;strResponse := http.GetString(Url);Memo4.Text := UTF8Decode(strResponse);finallyhttp.Free;end;end;
end;

请添加图片描述
还有一个注意的地方,我们有时候需要在自定义请求头中自定义Cookies,可以添加代码http.NoCookie:= True;来设置,否则程序会自己维护Cookies

3.提取响应协议头

有时候一些重要的信息会在响应协议头,比如Cookies,我们需要提取出来。封装单元中已经做了提取处理,这里只需要一行代码即可。

Memo3.Text:= http.HttpResponseHeaders.Text;

4.Post方法实现单词翻译

下面实现了"apple"翻译成了"苹果"

procedure TForm1.Button3Click(Sender: TObject);
varstrResponse: AnsiString;http: THTTP;Url: string;Header: string;PostBody: TStrings;
beginUrl := 'https://fanyi.qq.com/api/translate';Header :='Accept: application/json, text/javascript, */*; q=0.01' + #13#10 +'Accept-Encoding: gzip, deflate' + #13#10 +'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' + #13#10 +'Connection: keep-alive' + #13#10 +'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' + #13#10 +'Origin: https://fanyi.qq.com' + #13#10 +'Referer: https://fanyi.qq.com/' + #13#10 +'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100' + #13#10 +'X-Requested-With: XMLHttpRequest' + #13#10;http := THTTP.Create;PostBody := TStringList.Create;tryhttp.HttpRequestHeaders.Text := Header;PostBody.Text :='source=en' + #13#10 +'target=zh' + #13#10 +'sourceText=apple' + #13#10 +'sessionUuid=translate_uuid' + GenerateTimestamp(Now, True).ToString;strResponse := http.GetString(Url, PostBody);Memo4.Text := UTF8Decode(strResponse);Memo3.Text := http.HttpResponseHeaders.Text;finallyPostBody.Free;http.Free;end;
end;

这里Header的数据与PostBody的数据都是通过抓包所得。
请添加图片描述

成功返回了我们需要的数据:

{“sessionUuid”:“translate_uuid1713009200766”,“translate”:{“errCode”:0,“errMsg”:“”,“sessionUuid”:“translate_uuid1713009200766”,“source”:“en”,“target”:“zh”,“records”:[{“sourceText”:“apple”,“targetText”:“苹果”,“traceId”:“ca242e6218b845a8b1abf10b0610328f”}],“full”:true,“options”:{}},“dict”:null,“suggest”:null,“errCode”:0,“errMsg”:“ok”}

上面是一段json数据,下一篇文章将讲解如何在json数据中提取我们所需要的数据。

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

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

相关文章

airtest-ios真机搭建实践

首先阅读4 ios connection - Airtest Project Docs 在Windows环境下搭建Airtest对iOS真机进行自动化测试的过程相对复杂,因为iOS的自动化测试通常需要依赖Mac OS系统,但理论上借助一些工具和服务,Windows用户也可以间接完成部分工作。下面是…

软考中级工程师网络技术第二节网络体系结构

OSPF将路由器连接的物理网络划分为以下4种类型,以太网属于(25),X.25分组交换网属于(非广播多址网络NBMA)。 A 点对点网络 B 广播多址网络 C 点到多点网络 D 非广播多址网络 试题答案 正确答案: …

数据结构初阶:二叉树(二)

二叉树链式结构的实现 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在对二叉树结构掌握还不够深入,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二…

学习Rust的第5天:控制流

Control flow, as the name suggests controls the flow of the program, based on a condition. 控制流,顾名思义,根据条件控制程序的流。 If expression If表达式 An if expression is used when you want to execute a block of code if a condition …

list基础知识

list 1.list 的定义和结构 list 是双向链表&#xff0c;是C的容器模板&#xff0c;其接收两个参数&#xff0c;即 list(a,b) 其中 a 表示指定容器中存储的数据类型&#xff0c;b 表示用于分配器内存的分配器类型&#xff0c;默认为 list <int>; list 的特点&#xff1a;…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置&#xff0c;现在springboot新版本&#xff08;小编3.2.3&#xff09;在spring.data.xxx下了&#xff0c;如下所示&#xff0c;mongodb的配置在spring.data.mongodb下&#xff1a; 连接池相关参数配置-源码分析 拼接在…

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

学习了解大模型的四大缺陷

由中国人工智能学会主办的第十三届吴文俊人工智能科学技术奖颁奖典礼暨2023中国人工智能产业年会于2024年4月14日闭幕。 会上&#xff0c;中国工程院院士、同济大学校长郑庆华认为&#xff0c;大模型已经成为当前人工智能的巅峰&#xff0c;大模型之所以强&#xff0c;是依托了…

Java 设计模式系列:模板方法模式

简介 模板方法模式是一种行为型设计模式&#xff0c;它定义一个操作中的算法骨架&#xff0c;将一些步骤推迟到子类中。模板方法模式使得子类可以不改变一个算法的结构&#xff0c;即可重定义该算法的某些特定步骤。 在模板方法模式中&#xff0c;抽象类中定义了一系列基本操…

48.基于SpringBoot + Vue实现的前后端分离-雪具销售系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的雪具销售系统设计与实现管理工作系统…

精通技术写作:如何写出高质量技术文章?

CSDN 的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第 7 篇文章“如何撰写高质量技术文章”。本文深入探讨了如何写好一篇技术文章。文章给出了好的技术文章的定义和分析&#xff0c;并提供了从选题、…

MDK stm32怎么生成bin文件

第一种 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe --bin -o ../../Output/atk_f407.bin ../../Output/atk_f407.axf 空格解析 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe一个空格--bin一个空格-o两个空格../../Output/atk_f407.bin ../../Output/atk_f407.axf &#xff08;注意后…

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 1.Matlab实现…

ASP.NET基于TCP协议的简单即时通信软件的设计与实现

摘 要 即时通信(Instant Message)&#xff0c;由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微…

RocketMQ 之 IoT 消息解析:物联网需要什么样的消息技术?

作者&#xff1a;林清山&#xff08;隆基&#xff09; 前言&#xff1a; 从初代开源消息队列崛起&#xff0c;到 PC 互联网、移动互联网爆发式发展&#xff0c;再到如今 IoT、云计算、云原生引领了新的技术趋势&#xff0c;消息中间件的发展已经走过了 30 多个年头。 目前&a…

图神经网络推荐系统

链接&#xff08;何向南教授&#xff09;&#xff1a;https://hexiangnan.github.io/papers/wsdm22-tutorial-proposal.pdf 摘要&#xff1a; 近年来&#xff0c;图神经网络(graph neural network, GNN)以其强大的结构化数据处理能力和对高阶信息的挖掘能力&#xff0c;成为许…

【Go语言快速上手(二)】 分支与循环函数讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; Go快速上手 1. 前言2. 分支与循环2.1…

libtorch+cuda12.0cmake编译失败“Failed to find nvToolsExt”解决办法

博主已安装cuda12.0以及对应的libtorch。 这里可以直接通过安装cuda11.6&#xff08;cuda11.8也可以&#xff09;中的【Nsight NVTX】解决。 1、下载CUDA11.6 cuda下载链接 蓝色箭头根据电脑系统win10还是win11自行选择&#xff0c;其余均按图中所以选择。 2、安装 下载完…

集合体系java

Collection:单列集合&#xff1a;每个元素只包含一个值 Collection集合存储的是地址 Collection的三种遍历方法如下 //迭代器是用来遍历集合的专用方式&#xff08;数组没有迭代器&#xff09;&#xff0c;在java中迭代器的代表是Iterator //boolean hasNext():询问当前位置…

图书管理系统概述

自友图书馆管理系统解决方案适用于中小学、大中专院校以及企事业单位中小型图书馆的自动化管理需求&#xff0c;其功能覆盖了图书馆自动化集成管理业务流程所包括的所有环节。《图书馆管理系统》首先应该按照我国图书馆行业通用CNMARC格式及《中图法第四版》行业标准开发而成,支…