【测试平台系列】第一章 手撸压力机(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的知识,今天先让大家了解以下咱们的方式和节奏。后续深入学习。

相关文章
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
1123 130
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
931 2
|
Go 定位技术
Golang中设置HTTP请求代理的策略
在实际应用中,可能还需要处理代理服务器的连接稳定性、响应时间、以及错误处理等。因此,建议在使用代理时增加适当的错误重试机制,以确保网络请求的健壮性。此外,由于网络编程涉及的细节较多,彻底测试以确认代理配置符合预期的行为也是十分重要的。
481 8
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
462 0
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
783 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1722 23
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2377 24