How to use SetHeader method of rod Package

Best Rod code snippet using rod.SetHeader

hijack.go

Source:hijack.go Github

copy

Full Screen

...191 defer func() { _ = res.Body.Close() }()192 h.Response.payload.ResponseCode = res.StatusCode193 for k, vs := range res.Header {194 for _, v := range vs {195 h.Response.SetHeader(k, v)196 }197 }198 if loadBody {199 b, err := ioutil.ReadAll(res.Body)200 if err != nil {201 return err202 }203 h.Response.payload.Body = b204 }205 return nil206}207// HijackRequest context208type HijackRequest struct {209 event *proto.FetchRequestPaused210 req *http.Request211}212// Type of the resource213// 资源的类型214func (ctx *HijackRequest) Type() proto.NetworkResourceType {215 return ctx.event.ResourceType216}217// Method of the request218// 请求的方法219func (ctx *HijackRequest) Method() string {220 return ctx.event.Request.Method221}222// URL of the request223// 请求的URL224func (ctx *HijackRequest) URL() *url.URL {225 u, _ := url.Parse(ctx.event.Request.URL)226 return u227}228// Header via a key229// 通过key获得相应的请求头的值230func (ctx *HijackRequest) Header(key string) string {231 return ctx.event.Request.Headers[key].String()232}233// Headers of request234// 请求的请求头235func (ctx *HijackRequest) Headers() proto.NetworkHeaders {236 return ctx.event.Request.Headers237}238// Body of the request, devtools API doesn't support binary data yet, only string can be captured.239// 请求体,devtools API还不支持二进制数据,只能捕获字符串。240func (ctx *HijackRequest) Body() string {241 return ctx.event.Request.PostData242}243// JSONBody of the request244// 请求的JSONBody245func (ctx *HijackRequest) JSONBody() gson.JSON {246 return gson.NewFrom(ctx.Body())247}248// Req returns the underlaying http.Request instance that will be used to send the request.249// Req返回将用于发送请求的http.Request实例的底层。250func (ctx *HijackRequest) Req() *http.Request {251 return ctx.req252}253// SetContext of the underlaying http.Request instance254// 设置底层http.Request实例的上下文。255func (ctx *HijackRequest) SetContext(c context.Context) *HijackRequest {256 ctx.req = ctx.req.WithContext(c)257 return ctx258}259// SetBody of the request, if obj is []byte or string, raw body will be used, else it will be encoded as json.260// 设置请求的正文,如果obj是[]字节或字符串,将使用原始正文,否则将被编码为json。261func (ctx *HijackRequest) SetBody(obj interface{}) *HijackRequest {262 var b []byte263 switch body := obj.(type) {264 case []byte:265 b = body266 case string:267 b = []byte(body)268 default:269 b = utils.MustToJSONBytes(body)270 }271 ctx.req.Body = ioutil.NopCloser(bytes.NewBuffer(b))272 return ctx273}274// IsNavigation determines whether the request is a navigation request275// IsNavigation 确定请求是否是一个导航请求276func (ctx *HijackRequest) IsNavigation() bool {277 return ctx.Type() == proto.NetworkResourceTypeDocument278}279// HijackResponse context280type HijackResponse struct {281 payload *proto.FetchFulfillRequest282 fail *proto.FetchFailRequest283}284// Payload to respond the request from the browser.285// 来自浏览器请求响应的 payload286func (ctx *HijackResponse) Payload() *proto.FetchFulfillRequest {287 return ctx.payload288}289// Body of the payload290// playload 的主体291func (ctx *HijackResponse) Body() string {292 return string(ctx.payload.Body)293}294// Headers returns the clone of response headers.295// 返回响应头的克隆296// If you want to modify the response headers use HijackResponse.SetHeader .297// 如果想修改响应头请使用:HijackResponse.SetHeader298func (ctx *HijackResponse) Headers() http.Header {299 header := http.Header{}300 for _, h := range ctx.payload.ResponseHeaders {301 header.Add(h.Name, h.Value)302 }303 return header304}305// SetHeader of the payload via key-value pairs306// 通过键值对儿为 playload 设置响应头307func (ctx *HijackResponse) SetHeader(pairs ...string) *HijackResponse {308 for i := 0; i < len(pairs); i += 2 {309 ctx.payload.ResponseHeaders = append(ctx.payload.ResponseHeaders, &proto.FetchHeaderEntry{310 Name: pairs[i],311 Value: pairs[i+1],312 })313 }314 return ctx315}316// SetBody of the payload, if obj is []byte or string, raw body will be used, else it will be encoded as json.317// 设置有效载荷的主体,如果obj是[]字节或字符串,将使用原始主体,否则将被编码为json。318func (ctx *HijackResponse) SetBody(obj interface{}) *HijackResponse {319 switch body := obj.(type) {320 case []byte:321 ctx.payload.Body = body...

Full Screen

Full Screen

web.go

Source:web.go Github

copy

Full Screen

1package provider2import (3 "bytes"4 "context"5 "errors"6 "fmt"7 "io"8 "net/http"9 "net/url"10 "regexp"11 "sync"12 "github.com/PuerkitoBio/goquery"13 "github.com/go-rod/rod"14 "github.com/go-rod/rod/lib/launcher"15 "github.com/go-rod/rod/lib/proto"16)17// Rod is very sensitive and for now, the best approach is to have a mutex at the package level protecting all the18// operations.19var webBrowserMutex sync.Mutex // nolint: gochecknoglobals20type webClient interface {21 Do(req *http.Request) (*http.Response, error)22}23type webClientTransport struct {24 client webClient25}26func (w webClientTransport) RoundTrip(req *http.Request) (*http.Response, error) {27 return w.client.Do(req)28}29type webConfigRegex struct {30 expression regexp.Regexp31 key string32}33// WebConfig has the information to enhance the request.34type WebConfig struct {35 Header http.Header36}37// Web handle the verification of HTTP endpoints.38type Web struct {39 Config WebConfig40 ConfigOverwrite map[string]WebConfig41 browser *rod.Browser42 client webClient43 regex regexp.Regexp44 regexConfigOverwrite []webConfigRegex45}46// Init internal state.47func (w *Web) Init() error {48 if err := w.initRegex(); err != nil {49 return fmt.Errorf("fail to initialize the regex: %w", err)50 }51 if err := w.initRegexConfig(); err != nil {52 return fmt.Errorf("fail to initialize the regex config: %w", err)53 }54 w.initHTTP()55 if err := w.initBrowser(); err != nil {56 return fmt.Errorf("failed to initialize the browser: %w", err)57 }58 return nil59}60// Close the provider.61func (w *Web) Close() error {62 if err := w.browser.Close(); err != nil {63 return fmt.Errorf("failed to close the browser: %w", err)64 }65 return nil66}67// Authority checks if the web provider is responsible to process the entry.68func (w Web) Authority(uri string) bool {69 return w.regex.Match([]byte(uri))70}71// Valid check if the link is valid.72func (w Web) Valid(ctx context.Context, _, uri string) (bool, error) {73 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)74 if err != nil {75 return false, fmt.Errorf("fail to create the HTTP request: %w", err)76 }77 w.configRequest(req)78 resp, err := w.client.Do(req)79 if err != nil {80 return false, nil81 }82 defer resp.Body.Close()83 endpoint, err := url.Parse(uri)84 if err != nil {85 return false, fmt.Errorf("fail to parse uri: %w", err)86 }87 isValid := ((resp.StatusCode >= 200) && (resp.StatusCode < 300))88 if !isValid {89 return false, nil90 }91 validAnchor, err := w.validAnchor(resp.Body, endpoint.Fragment)92 if err != nil {93 return false, fmt.Errorf("fail to verify the anchor: %w", err)94 }95 if validAnchor {96 return true, nil97 }98 validAnchor, err = w.validAnchorBrowser(ctx, uri, endpoint.Fragment)99 if err != nil {100 return false, fmt.Errorf("fail to verify the anchor with a browser: %w", err)101 }102 return validAnchor, nil103}104func (w Web) validAnchor(body io.Reader, anchor string) (bool, error) {105 if anchor == "" {106 return true, nil107 }108 anchor = fmt.Sprintf("#%s", anchor)109 doc, err := goquery.NewDocumentFromReader(body)110 if err != nil {111 return false, fmt.Errorf("failt o parse the response: %w", err)112 }113 var found bool114 doc.Find("a").Each(func(_ int, selection *goquery.Selection) {115 if found {116 return117 }118 href, ok := selection.Attr("href")119 if !ok {120 return121 }122 found = (href == anchor)123 })124 return found, nil125}126func (w *Web) initRegex() error {127 expr := `^(http|https):\/\/`128 regex, err := regexp.Compile(expr)129 if err != nil {130 return fmt.Errorf("fail to compile the expression '%s': %w", expr, err)131 }132 w.regex = *regex133 return nil134}135func (w *Web) initRegexConfig() error {136 w.regexConfigOverwrite = make([]webConfigRegex, 0, len(w.regexConfigOverwrite))137 for key := range w.ConfigOverwrite {138 regex, err := regexp.Compile(key)139 if err != nil {140 return fmt.Errorf("fail to compile the expression '%s': %w", key, err)141 }142 w.regexConfigOverwrite = append(w.regexConfigOverwrite, webConfigRegex{key: key, expression: *regex})143 }144 return nil145}146func (w *Web) initHTTP() {147 w.client = &http.Client{148 Transport: webClientTransport{client: http.DefaultClient},149 CheckRedirect: func(req *http.Request, via []*http.Request) error {150 switch req.Response.StatusCode {151 case http.StatusPermanentRedirect, http.StatusMovedPermanently:152 return nil153 default:154 return errors.New("redirect not allowed")155 }156 },157 }158}159func (w *Web) initBrowser() error {160 webBrowserMutex.Lock()161 defer webBrowserMutex.Unlock()162 launcherURL, err := launcher.New().Headless(true).Launch()163 if err != nil {164 return fmt.Errorf("failed to launch the browser: %w", err)165 }166 w.browser = rod.New().ControlURL(launcherURL)167 if err = w.browser.Connect(); err != nil {168 return fmt.Errorf("failed to connect to the browser: %w", err)169 }170 return nil171}172func (w Web) validAnchorBrowser(ctx context.Context, endpoint string, anchor string) (_ bool, err error) {173 webBrowserMutex.Lock()174 defer webBrowserMutex.Unlock()175 pctx, pctxCancel := context.WithCancel(ctx)176 defer pctxCancel()177 page, err := w.browser.Page(proto.TargetCreateTarget{})178 if err != nil {179 return false, fmt.Errorf("failed to create the browser page: %w", err)180 }181 defer func() {182 if perr := page.Close(); perr != nil {183 err = fmt.Errorf("failed to close the browser tab: %w", perr)184 }185 }()186 if _, err = page.Context(pctx).SetExtraHeaders(w.genHeaders(endpoint)); err != nil {187 return false, fmt.Errorf("failed to set the headers at the browser page: %w", err)188 }189 if err := page.Navigate(endpoint); err != nil {190 return false, fmt.Errorf("failed to navigate to the page: %w", err)191 }192 if err := page.WaitLoad(); err != nil {193 return false, fmt.Errorf("failed to wait for the page to load: %w", err)194 }195 result, err := page.Eval("", "document.documentElement.innerHTML", nil)196 if err != nil {197 return false, fmt.Errorf("failed to execute the javascript at the page: %w", err)198 }199 return w.validAnchor(bytes.NewBufferString(result.Value.String()), anchor)200}201func (w Web) configRequest(r *http.Request) {202 setHeader := func(header http.Header) {203 for key, values := range header {204 for _, value := range values {205 r.Header.Set(key, value)206 }207 }208 }209 setHeader(w.Config.Header)210 endpoint := r.URL.String()211 for _, cfg := range w.regexConfigOverwrite {212 if cfg.expression.Match([]byte(endpoint)) {213 setHeader(w.ConfigOverwrite[cfg.key].Header)214 return215 }216 }217}218func (w Web) genHeaders(endpoint string) []string {219 header := make(http.Header)220 setHeader := func(source http.Header) {221 for key, values := range source {222 for _, value := range values {223 header.Set(key, value)224 }225 }226 }227 setHeader(w.Config.Header)228 for _, cfg := range w.regexConfigOverwrite {229 if cfg.expression.MatchString(endpoint) {230 setHeader(w.ConfigOverwrite[cfg.key].Header)231 break232 }233 }234 results := make([]string, 0, len(header)*2)235 for key := range header {236 results = append(results, key, header.Get(key))237 }238 return results239}...

Full Screen

Full Screen

testing.go

Source:testing.go Github

copy

Full Screen

...90func injectData(ctx *rod.Hijack) {91 log.Println("Start: Intercept and modifying POST with data")92 //ctx.MustLoadResponse()93 body := "Injected response"94 ctx.Response.SetBody(body).SetHeader(95 "Access-Control-Allow-Origin", siteURL,96 "Access-Control-Expose-Headers", "Link",97 "Cache-Control", "public, max-age=60",98 "Content-Length", strconv.Itoa(len(body)),99 "Content-Type", "application/text",100 //"Date", "Mon, 16 May 2022 20:53:07 GMT",101 "Vary", "Origin",102 )103 log.Println("End: Intercept and modifying POST with data")104 //ctx.Response.Fail(proto.NetworkErrorReasonAddressUnreachable)105}106func injectEmpty(ctx *rod.Hijack) {107 log.Println("Start: Intercept and modifying POST with empty BODY")108 //ctx.MustLoadResponse()109 ctx.Response.SetBody([]byte{}).SetHeader(110 "Access-Control-Allow-Origin", siteURL,111 "Access-Control-Expose-Headers", "Link",112 "Cache-Control", "public, max-age=60",113 "Content-Length", "0",114 "Content-Type", "application/text",115 //"Date", "Mon, 16 May 2022 20:53:07 GMT",116 "Vary", "Origin",117 )118 log.Println("End: Intercept and modifying POST with empty BODY")119 //ctx.Response.Fail(proto.NetworkErrorReasonAddressUnreachable)120}...

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import "fmt"2type rod struct {3}4func (r *rod) SetHeader(length, diameter int) {5}6func main() {7r := &rod{}8r.SetHeader(10, 20)9fmt.Println(r.length, r.diameter)10}11import "fmt"12type rod struct {13}14func (r *rod) SetHeader(length, diameter int) {15}16func main() {17r := &rod{}18r.SetHeader(10, 20)19fmt.Println(r.length, r.diameter)20}

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 browser := rod.New().ControlURL(launcher.New().MustLaunch()).MustConnect()4 page := browser.MustPage("")5 page.MustSetHeader("User-Agent", "Rod")6 page.MustReload()7 page.MustWaitLoad()8 title := page.MustTitle()9 println(title)10}11import (12func main() {13 browser := rod.New().ControlURL(launcher.New().MustLaunch()).MustConnect()14 page := browser.MustPage("")15 page.MustSetExtraHeaders(map[string]string{16 })17 page.MustReload()18 page.MustWaitLoad()19 title := page.MustTitle()20 println(title)21}22import (23func main() {24 browser := rod.New().ControlURL(launcher.New().MustLaunch()).MustConnect()25 page := browser.MustPage("")26 page.MustSetExtraHeaders(map[string]string{27 })28 page.MustReload()29 page.MustWaitLoad()

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 Devtools(false)4 defer l.Cleanup()5 browser := rod.New().ControlURL(l).MustConnect()6 page.MustSetHeader("User-Agent", "Rod")7 fmt.Println(page.MustGetHeader("User-Agent"))8}9import (10func main() {11 Devtools(false)12 defer l.Cleanup()13 browser := rod.New().ControlURL(l).MustConnect()14 page.MustSetExtraHeaders(map[string]interface{}{"User-Agent": "Rod"})15 fmt.Println(page.MustGetHeader("User-Agent"))16}

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 page.SetHeader("X-My-Header", "My-Value")4 fmt.Println(page.MustElement("pre").MustText())5}6{7 "headers": {8 }9}10page.SetHeaders(map[string]string)11import (12func main() {13 page.SetHeaders(map[string]string{14 })15 fmt.Println(page.MustElement("pre").MustText())16}17{18 "headers": {19 }20}

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 rod := &z01.Rod{}4 rod.SetHeader("Rodrigo")5 fmt.Println(rod.Header)6}7import (8func main() {9 rod := &z01.Rod{}10 rod.SetHeader("Rodrigo")11 fmt.Println(rod.Header)12 rod.SetHeader("Rodrigo Diez")13 fmt.Println(rod.Header)14}15import (16func main() {17 rod := &z01.Rod{}18 rod.SetHeader("Rodrigo")19 fmt.Println(rod.Header)20 rod.SetHeader("Rodrigo Diez")21 fmt.Println(rod.Header)22 rod.SetHeader("Rodrigo Diez Gutierrez")23 fmt.Println(rod.Header)24}25import (26func main() {27 rod := &z01.Rod{}28 rod.SetHeader("Rodrigo")29 fmt.Println(rod.Header)30 rod.SetHeader("Rodrigo Diez")31 fmt.Println(rod.Header)32 rod.SetHeader("Rodrigo Diez Gutierrez")33 fmt.Println(rod.Header)34 rod.SetHeader("Rodrigo Diez Gutierrez 01")35 fmt.Println(rod.Header)36}37import (38func main() {39 rod := &z01.Rod{}40 rod.SetHeader("Rodrigo")41 fmt.Println(rod.Header)42 rod.SetHeader("Rodrigo Diez")43 fmt.Println(rod.Header)44 rod.SetHeader("Rodrigo Diez Gutierrez")45 fmt.Println(rod.Header)46 rod.SetHeader("Rodrigo

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import "fmt"2func main() {3 rod.SetHeader()4 fmt.Println("rod length:", rod.length)5 fmt.Println("rod diameter:", rod.diameter)6 fmt.Println("rod weight:", rod.weight)7}

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 browser := rod.New().ControlURL(launcher.New().MustLaunch()).MustConnect()4 page.MustSetHeader("X-My-Header", "1")5 fmt.Println(page.MustGetHeader("X-My-Header"))6}

Full Screen

Full Screen

SetHeader

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 browser := rod.New().Connect()4 page.SetHeader("User-Agent", "Rod")5 fmt.Println(page)6}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Rod automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful