@@ -2,14 +2,12 @@ package grawl
22
33import (
44 "encoding/base64"
5- "encoding/csv"
65 "errors"
76 "fmt"
87 "github.com/fatih/color"
98 "github.com/gocolly/colly/v2"
109 "github.com/manifoldco/promptui"
1110 url2 "net/url"
12- "os"
1311 "regexp"
1412 "slices"
1513 "strings"
@@ -29,6 +27,7 @@ type Grawler struct {
2927 errorCount uint32
3028 totalDuration time.Duration
3129 runningRequests * RunningRequests
30+ fileWriter * FileWriter
3231}
3332
3433func NewGrawler (flags Flags ) * Grawler {
@@ -157,6 +156,10 @@ func (g *Grawler) Grawl(url string) {
157156
158157 reqResult .UpdateOnResponse (r , g .responseCount , duration , nil )
159158 g .printResult (reqResult )
159+
160+ if g .fileWriter != nil {
161+ g .fileWriter .WriteResultLine (reqResult )
162+ }
160163 } else {
161164 fmt .Printf ("No start time found for %s\n " , r .Request .URL )
162165 }
@@ -187,7 +190,6 @@ func (g *Grawler) Grawl(url string) {
187190 reqResult .UpdateOnResponse (r , g .responseCount , duration , & err )
188191 g .totalDuration += duration
189192 g .printResult (reqResult )
190- //fmt.Println("error:", err)
191193 } else {
192194 fmt .Println ("Request data not found" , r .Request .URL )
193195 }
@@ -255,16 +257,17 @@ func (g *Grawler) Grawl(url string) {
255257 })
256258 }
257259
260+ if g .flags .FlagOutputFilename != "" {
261+ g .fileWriter = NewFileWriter (g .flags .FlagOutputFilename )
262+ g .fileWriter .InitFile ()
263+ }
264+
258265 err = c .Visit (url )
259266 if err != nil {
260267 fmt .Printf ("Could not visit url: %v\n " , err )
261268 return
262269 }
263270
264- if g .flags .FlagOutputFilename != "" {
265- g .saveCsvFile (g .runningRequests )
266- }
267-
268271 g .printSummary ()
269272}
270273
@@ -302,32 +305,32 @@ func (g *Grawler) printSummary() {
302305 fmt .Println ("Errors/Skipped: " , g .errorCount )
303306}
304307
305- func (g * Grawler ) saveCsvFile (runningRequests * RunningRequests ) {
306- fmt .Printf ("Saving file \" %s\" .\n " , g .flags .FlagOutputFilename )
307-
308- results := runningRequests .GetValues ()
309-
310- file , err := os .Create (g .flags .FlagOutputFilename )
311- if err != nil {
312- panic (err )
313- }
314- defer file .Close ()
315-
316- writer := csv .NewWriter (file )
317- writer .Comma = ';'
318- defer writer .Flush ()
319-
320- headers := GetCsvHeader ()
321- if err := writer .Write (headers ); err != nil {
322- panic (err )
323- }
324-
325- for _ , result := range * results {
326- if err := writer .Write (result .GetCsvRow ()); err != nil {
327- panic (err )
328- }
329- }
330- }
308+ // func (g *Grawler) saveCsvFile(runningRequests *RunningRequests) {
309+ // fmt.Printf("Saving file \"%s\".\n", g.flags.FlagOutputFilename)
310+ //
311+ // results := runningRequests.GetValues()
312+ //
313+ // file, err := os.Create(g.flags.FlagOutputFilename)
314+ // if err != nil {
315+ // panic(err)
316+ // }
317+ // defer file.Close()
318+ //
319+ // writer := csv.NewWriter(file)
320+ // writer.Comma = ';'
321+ // defer writer.Flush()
322+ //
323+ // headers := GetCsvHeader()
324+ // if err := writer.Write(headers); err != nil {
325+ // panic(err)
326+ // }
327+ //
328+ // for _, result := range *results {
329+ // if err := writer.Write(result.GetCsvRow()); err != nil {
330+ // panic(err)
331+ // }
332+ // }
333+ // }
331334
332335func (g * Grawler ) promptPassword () (string , error ) {
333336 validate := func (input string ) error {
0 commit comments