分享一個小工具 Boast:如何從服務端跟蹤所有 HTTP 請求,並方便回放?
原文連結:http://blog.phpor.me/note/2017/03/31/track-and-replay-http-request.html 客戶端工程師:“xxx 介面壞了,我的程式都沒動過”,後端經常會收到這樣的質問,但是我們現在如何重現這個問題?有以下幾種情況:
一、後端測試了一下發現沒有問題
“我這裡測試了是好的啊”,就只能讓客戶端工程師再操作一遍,親眼看到錯誤之後就肯定是有問題了,就得去找問題,這時候這臺手機,以及這臺手機裡面的資料都非常重要,因為這些資料可以讓 Bug 重現。
二、測試了也有問題
這時候後端就去修改程式了,但是每一次的測試是否有問題都需要在客戶端中操作,有時候的操作非常的複雜,在這上面花的時間會比較多。最後使了各種神通才終於找到問題,原來是這個使用者的某某資料有異常才會出現這種情況。
以上這種情況屢見不鮮,最麻煩的點就在於,每次都要以出現 Bug 的相同引數去請求,有時候你知道這些請求的引數,可以把它們放到 Postman 這種工具裡面,但大部分時候你並不知道它對應的引數 (token)
如果我們可以在服務端跟蹤所有的請求:介面地址,Header,Body,後端返回的 Header、Body,這樣我們就能查到對應的請求引數和返回值,可以直接填到 Postman 裡面,要是還能一鍵重新請求就好了,因為我們不想修改請求的引數,只是想再以相同的引數請求一遍,這樣我們來除錯對應的程式。
正好以前用過 ngrok,發現它有一個非常好的 debug 介面,可以達到以上的要求,但現在不需要它的內網穿透功能,於是只能自己寫一個程式,只包含以下功能:
- 記錄介面所有的 Request 和 Response
- 可以一鍵重新請求某個 Request
基本工作原理
HTTP 客戶端 Boast Web 伺服器
| GET http://localhost:8080/ | 記錄請求並進行反向代理 | Response 200 OK
| ---------------------------> | --------------------------> | ------┐
| | | |
| | 記錄返回資訊並轉發給客戶端 | <----┘
| <--------------------------- | <-------------------------- |
┌----------------------------------------------------------------------------┐
| url: http://localhost:8081 |
| ---------------------------------------------------------------------------|
| All Transactions ┌ - - - - - - - - - - - - - - - - - - - - - - - ┐ |
| ---------------------- | time: 10 hours ago Client: 127.0.0.1 | |
| |GET / 200 OK 100 ms | | | |
| ---------------------- | Request [ Replay ] | |
| | - - - - - - - - - - - - | |
| | GET http://localhost/ HTTP/1.1 | |
| | User-Agent: curl/7.51.0 | |
| | Accept: */* | |
| | | |
| | Response | |
| | - - - - - - - - - - - - | |
| | HTTP/1.1 200 OK | |
| | X-Server: HTTPLab | |
| | Date: Thu, 02 Mar 2017 02:25:27 GMT | |
| | Content-Length: 13 | |
| | Content-Type: text/plain; charset=utf-8 | |
| | | |
| | Hello, World | |
| └ - - - - - - - - - - - - - - - - - - - - - - - ┘ |
| |
└----------------------------------------------------------------------------┘
最近正在學習 Go,正好拿它來完成這個小程式,取名為 Boast 為了讓我們在重現 Bug 上更為主動和方便,以及更快地修復,好多花點時間來造輪子!
Go 和前端都是現學現賣,歡迎大家拍磚。
相關文章
- Dubbo 整合 Pinpoint 做分散式服務請求跟蹤分散式
- 如何用PHP取得所有HTTP請求頭PHPHTTP
- 從客戶端向服務端發起請求(3種)客戶端服務端
- 前端傳送的請求,是如何請求到後端服務的?前端後端
- 使用OpenTracing跟蹤Go中的HTTP請求延遲GoHTTP
- 服務端如何獲取客戶端請求IP地址服務端客戶端
- SSRF 服務端請求偽造服務端
- Nacos - 服務端處理心跳請求服務端
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行
- HttpSendRequest向服務端傳送資料,構造請求http頭HTTP服務端
- HttpSendRequest向服務端傳送資料,構造請求http頭薦HTTP服務端
- 手寫一個同步服務端時間的小工具服務端
- Nacos - 服務端處理註冊請求服務端
- Oracle EBS併發請求啟用跟蹤Oracle
- fastHttp服務端處理請求的過程ASTHTTP服務端
- Nacos - 服務端處理例項列表請求服務端
- [服務端與網路]一條http請求(一次回車後)到底經歷了什麼服務端HTTP
- python requests get請求 如何獲取所有請求Python
- 從零建立一個 Dart 服務端專案Dart服務端
- node之HTTP 從服務端感受ajax和formHTTP服務端ORM
- 使用 Solon Cloud 的 Jaeger 做請求鏈路跟蹤Cloud
- 技巧:如何從蘋果Mac跟蹤裝置上所有電池的電量?蘋果Mac
- http.Post 請求 返回一個圖片HTTP
- Angular如何對包含了HTTP請求的服務類進行單元測試AngularHTTP
- Netty整合SpringMVC,實現高效的HTTP服務請求NettySpringMVCHTTP
- 像跟蹤分散式服務呼叫那樣跟蹤 Go 函式呼叫鏈分散式Go函式
- 為 fastapi 新增全域性唯一請求id,用於日誌跟蹤ASTAPI
- Go如何響應http請求?GoHTTP
- 如何壓縮 HTTP 請求正文HTTP
- http請求HTTP
- HTTP 請求HTTP
- 使⽤用Requests庫構建⼀一個HTTP請求HTTP
- 一個HTTP請求,把網站打裂開了HTTP網站
- Android Http請求框架一:Get 和 Post 請求AndroidHTTP框架
- 帶你手把手擼個用node代理請求後端介面的服務後端
- 分享個服務
- 如何檢測 Web 服務請求丟失問題Web