@@ -20,12 +20,13 @@ import (
2020
2121// Browser is a browser structure for nuclei headless module
2222type Browser struct {
23- customAgent string
24- tempDir string
25- previousPIDs map [int32 ]struct {} // track already running PIDs
26- engine * rod.Browser
27- options * types.Options
28- launcher * launcher.Launcher
23+ customAgent string
24+ defaultHeaders map [string ]string
25+ tempDir string
26+ previousPIDs map [int32 ]struct {} // track already running PIDs
27+ engine * rod.Browser
28+ options * types.Options
29+ launcher * launcher.Launcher
2930
3031 // use getHTTPClient to get the http client
3132 httpClient * http.Client
@@ -95,6 +96,7 @@ func New(options *types.Options) (*Browser, error) {
9596 if browserErr := browser .Connect (); browserErr != nil {
9697 return nil , browserErr
9798 }
99+ defaultHeaders := make (map [string ]string )
98100 customAgent := ""
99101 for _ , option := range options .CustomHeaders {
100102 parts := strings .SplitN (option , ":" , 2 )
@@ -103,12 +105,20 @@ func New(options *types.Options) (*Browser, error) {
103105 }
104106 if strings .EqualFold (parts [0 ], "User-Agent" ) {
105107 customAgent = parts [1 ]
108+ } else {
109+ k := strings .TrimSpace (parts [0 ])
110+ v := strings .TrimSpace (parts [1 ])
111+ if k == "" || v == "" {
112+ continue
113+ }
114+ defaultHeaders [k ] = v
106115 }
107116 }
108117
109118 engine := & Browser {
110119 tempDir : dataStore ,
111120 customAgent : customAgent ,
121+ defaultHeaders : defaultHeaders ,
112122 engine : browser ,
113123 options : options ,
114124 httpClientOnce : & sync.Once {},
@@ -135,6 +145,30 @@ func (b *Browser) UserAgent() string {
135145 return b .customAgent
136146}
137147
148+ // applyDefaultHeaders setsheaders passed via cli -H flag
149+ func (b * Browser ) applyDefaultHeaders (p * rod.Page ) error {
150+ pairs := make ([]string , 0 , len (b .defaultHeaders )* 2 + 2 )
151+
152+ hasAcceptLanguage := false
153+ for k := range b .defaultHeaders {
154+ if strings .EqualFold (k , "Accept-Language" ) {
155+ hasAcceptLanguage = true
156+ break
157+ }
158+ }
159+ if ! hasAcceptLanguage {
160+ pairs = append (pairs , "Accept-Language" , "en, en-GB, en-us;" )
161+ }
162+ for k , v := range b .defaultHeaders {
163+ pairs = append (pairs , k , v )
164+ }
165+ if len (pairs ) == 0 {
166+ return nil
167+ }
168+ _ , err := p .SetExtraHeaders (pairs )
169+ return err
170+ }
171+
138172func (b * Browser ) getHTTPClient () (* http.Client , error ) {
139173 var err error
140174 b .httpClientOnce .Do (func () {
0 commit comments