Skip to content

Commit f09318b

Browse files
feat(http): Add support for compressed HTTP responses
Co-authored-by: Vicky Chhetri <specialpower321@gmail.com>
1 parent 14cf54e commit f09318b

File tree

1 file changed

+94
-8
lines changed

1 file changed

+94
-8
lines changed

tests/test.go

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import (
1212
"strings"
1313
"net/http"
1414
"crypto/tls"
15+
"compress/gzip"
16+
"compress/zlib"
17+
18+
"github.com/andybalholm/brotli"
1519

1620
"github.com/bytedance/sonic"
1721
)
@@ -198,13 +202,41 @@ func Mode1(url string) {
198202
log.Fatal(err)
199203
}
200204

205+
var reader io.ReadCloser
206+
207+
switch res.Header.Get("Content-Encoding") {
208+
case "gzip":
209+
gzReader, err := gzip.NewReader(res.Body)
210+
if err != nil {
211+
fmt.Printf("Error creating gzip reader: %v\n", err)
212+
return
213+
}
214+
reader = gzReader
215+
case "deflate":
216+
zlibReader, err := zlib.NewReader(res.Body)
217+
if err != nil {
218+
fmt.Printf("Error creating deflate reader: %v\n", err)
219+
return
220+
}
221+
reader = zlibReader
222+
case "br":
223+
reader = io.NopCloser(brotli.NewReader(res.Body))
224+
default:
225+
reader = res.Body
226+
}
201227
defer res.Body.Close()
202228

203-
body, err := io.ReadAll(res.Body)
229+
if res.StatusCode >= 400 {
230+
return
231+
}
232+
233+
body, err := io.ReadAll(reader)
204234
if err != nil {
205-
log.Fatal(err)
235+
fmt.Printf("Error reading response body: %v\n", err)
236+
return
206237
}
207238

239+
208240
os.WriteFile("response.txt", body, os.ModePerm)
209241
fmt.Println(Green+"[+] Response:", res.Status+Reset)
210242
fmt.Println(Green+"[+] Response URL:", res.Request.URL.String() + Reset)
@@ -307,11 +339,38 @@ func Mode3(url string) {
307339
log.Fatal(err)
308340
}
309341

342+
var reader io.ReadCloser
343+
344+
switch res.Header.Get("Content-Encoding") {
345+
case "gzip":
346+
gzReader, err := gzip.NewReader(res.Body)
347+
if err != nil {
348+
fmt.Printf("Error creating gzip reader: %v\n", err)
349+
return
350+
}
351+
reader = gzReader
352+
case "deflate":
353+
zlibReader, err := zlib.NewReader(res.Body)
354+
if err != nil {
355+
fmt.Printf("Error creating deflate reader: %v\n", err)
356+
return
357+
}
358+
reader = zlibReader
359+
case "br":
360+
reader = io.NopCloser(brotli.NewReader(res.Body))
361+
default:
362+
reader = res.Body
363+
}
310364
defer res.Body.Close()
311365

312-
body, err := io.ReadAll(res.Body)
366+
if res.StatusCode >= 400 {
367+
return
368+
}
369+
370+
body, err := io.ReadAll(reader)
313371
if err != nil {
314-
log.Fatal(err)
372+
fmt.Printf("Error reading response body: %v\n", err)
373+
return
315374
}
316375

317376
os.WriteFile("response.txt", body, os.ModePerm)
@@ -320,7 +379,7 @@ func Mode3(url string) {
320379
fmt.Println(Green + "[+] Saved response to response.txt" + Reset)
321380
}
322381

323-
func Mode4(url string, errorMsg string) {
382+
ffunc Mode4(url string, errorMsg string) {
324383
fmt.Println(Yellow+"[*] Testing URL:", url+Reset)
325384
fmt.Println(Yellow+"[*] Testing error message:", errorMsg+Reset)
326385
fmt.Println(Yellow + "[*] Mode: 4 (Error Message Check)" + Reset)
@@ -366,11 +425,38 @@ func Mode4(url string, errorMsg string) {
366425
log.Fatal(err)
367426
}
368427

428+
var reader io.ReadCloser
429+
430+
switch res.Header.Get("Content-Encoding") {
431+
case "gzip":
432+
gzReader, err := gzip.NewReader(res.Body)
433+
if err != nil {
434+
fmt.Printf("Error creating gzip reader: %v\n", err)
435+
return
436+
}
437+
reader = gzReader
438+
case "deflate":
439+
zlibReader, err := zlib.NewReader(res.Body)
440+
if err != nil {
441+
fmt.Printf("Error creating deflate reader: %v\n", err)
442+
return
443+
}
444+
reader = zlibReader
445+
case "br":
446+
reader = io.NopCloser(brotli.NewReader(res.Body))
447+
default:
448+
reader = res.Body
449+
}
369450
defer res.Body.Close()
370451

371-
body, err := io.ReadAll(res.Body)
452+
if res.StatusCode >= 400 {
453+
return
454+
}
455+
456+
body, err := io.ReadAll(reader)
372457
if err != nil {
373-
log.Fatal(err)
458+
fmt.Printf("Error reading response body: %v\n", err)
459+
return
374460
}
375461

376462
bodyStr := string(body)
@@ -382,7 +468,7 @@ func Mode4(url string, errorMsg string) {
382468
} else {
383469
fmt.Println(Red+"[-] Error message not found in response body: " + errorMsg + "\n[-] This means if a profile does not exist on %s", url, "I CANNOT detect it!" + Reset)
384470
}
385-
}
471+
}
386472

387473
func main() {
388474

0 commit comments

Comments
 (0)