【测试平台系列】第一章 手撸压力机(1)简单的http请求实现

简介: 测试平台,我们首先从手撸压力机开始。压力机也就是所谓的客户端,我们发送的请求是从这里开始对服务端的接口进行访问。

测试平台,我们首先从手撸压力机开始。压力机也就是所谓的客户端,我们发送的请求是从这里开始对服务端的接口进行访问。

首先从HTTP请求开始,我们采用Go语言进行开发,http(https)请求客户端我们使用fasthttp,官网地址:https://pkg.go.dev/github.com/valyala/fasthttp# 有兴趣的大家可以看看。

  1. 使用goland(ide)新建kitchen-engine项目(go 1.18.3)
  2. 在项目中新建main.go文件
  3. 新建server目录
  4. 在server目录新建http_client.go文件

http_client.go     构建简单的http请求客户端

package server


import (

"crypto/tls"

"fmt"

"github.com/valyala/fasthttp"

)


func RequestHttp() {

// 使用fasthttp 协程池


// 新建一个http请求

req := fasthttp.AcquireRequest()

defer fasthttp.ReleaseRequest(req)

// 新建一个http响应接受服务端的返回

resp := fasthttp.AcquireResponse()

defer fasthttp.ReleaseResponse(resp)


// 新建一个http的客户端

client := newHttpClient()


// 添加该请求的http方法:get、post、delete、update等等

req.Header.SetMethod("GET")


// 添加该请求的http的url

req.SetRequestURI("http://www.baidu.com")


// 开始请求

err := client.Do(req, resp)

if err != nil {

fmt.Sprintln("发送http请求错误:   ", err.Error())

}

      // 打印响应结果

fmt.Println("resp:    ", resp.String())


}


func newHttpClient() (httpClient *fasthttp.Client) {

// tls验证,关闭验证

tr := &tls.Config{

InsecureSkipVerify: true,

}



// 新建指针类型的客户端

httpClient = &fasthttp.Client{}

httpClient.TLSConfig = tr

return

}

  1. 在main.go调用请求方法

package main

// 注意,main方法必须在main包下,同一个包只能由一个名称。


import"kitchen-engine/server"


func main() {

// 调用server目录下的RequestHttp方法

server.RequestHttp()

}

  1. 运行程序,打印结果

resp:     HTTP/1.1 200 OK

Server: BWS/1.1

Date: Tue, 06 Jun 2023 08:47:55 GMT

Content-Type: text/html; charset=utf-8

Content-Length: 385396

Bdpagetype: 1

Bdqid: 0xe84c2188000230d1

Connection: keep-alive

Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.comhttp://mirror-chat.baidu.comhttps://fj-chat.baidu.comhttps://hba-chat.baidu.comhttps://hbe-chat.baidu.comhttps://njjs-chat.baidu.comhttps://nj-chat.baidu.comhttps://hna-chat.baidu.comhttps://hnb-chat.baidu.comhttp://debug.baidu-int.com;

P3p: CP=" OTI DSP COR IVA OUR IND COM "

P3p: CP=" OTI DSP COR IVA OUR IND COM "

Traceid: 1686041274356516890616738790783028703441

Vary: Accept-Encoding

X-Ua-Compatible: IE=Edge,chrome=1

Set-Cookie: BAIDUID=6858ED69C7325FA94179EB79A1A57209:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: BIDUPSID=6858ED69C7325FA94179EB79A1A57209; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: PSTM=1686041274; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: BAIDUID=6858ED69C7325FA92806F56F5DF35119:FG=1; max-age=31536000; expires=Wed, 05-Jun-24 08:47:54 GMT; domain=.baidu.com; path=/; version=1; comment=bd

Set-Cookie: BDSVRTM=0; path=/

Set-Cookie: BD_HOME=1; path=/

Set-Cookie: H_PS_PSSID=38515_36545_38687_38768_38843_38485_38814_38823_38838_38640_26350_38567_38669; path=/; domain=.baidu.com


<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#ffffff"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文


先从这里开始讲起把,其中会涉及到很多go和http的知识,今天先让大家了解以下咱们的方式和节奏。后续深入学习。

相关文章
|
2月前
|
Rust 前端开发 API
Tauri 开发实践 — Tauri HTTP 请求开发
本文介绍了如何在 Tauri 中发起 HTTP 请求。首先通过安装 Tauri 生态中的工具包并配置 `tauri.conf.json` 文件来允许特定域名的 HTTP 通信。接着封装了一个简单的 HTTP 客户端类,并在页面中使用该客户端实现 GET 和 POST 请求。最后提供了完整的源码地址以供参考。此功能使得桌面应用能够与远程服务器进行交互,增强了应用的实用性。
151 1
Tauri 开发实践 — Tauri HTTP 请求开发
|
15天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
66 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
13天前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
53 15
|
8天前
|
监控 测试技术 定位技术
HTTP代理IP响应速度测试方案设计与指标体系
随着数字化发展,网络安全、隐私保护及内容访问自由成为核心需求。HTTP代理因其技术优势成为热门选择。本文介绍HTTP代理IP响应速度测试方案,包括基础性能、稳定性、地理位置、实际应用、安全性测试及监控指标,推荐测试工具,并提供测试结果评估标准。
21 2
|
17天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
26 3
|
22天前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
23 5
|
1月前
|
缓存 前端开发 API
|
2月前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
114 1
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
1月前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
45 3
|
1月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现