rod icon indicating copy to clipboard operation
rod copied to clipboard

Missing header in hijack request

Open thanhps42 opened this issue 4 years ago • 5 comments

When I hijack, the request missing these headers: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Dest

thanhps42 avatar Aug 12 '20 12:08 thanhps42

Currently, we can use this event to get it:

page.EachEvent(func(e *proto.NetworkRequestWillBeSentExtraInfo) {
    fmt.Println(e)
})()

ysmood avatar Aug 13 '20 18:08 ysmood

After trying test code like this:

rod=cdp go test -v -run Test/TestHijackContinue$

func (s *S) TestHijackContinue() {
	url, engine, close := serve()
	defer close()

	// to simulate a backend server
	engine.GET("/", ginHTML(`<html>
	<body></body>
	<script>
		fetch('/a', { headers: { 'My-Header': 'test' } }).then(async (res) => {
			document.body.innerText = await res.text()
		})
	</script></html>`))
	engine.GET("/a", ginString(`ok`))

	router := s.page.HijackRequests()
	defer router.MustStop()

	router.MustAdd(url+"/a", func(ctx *rod.Hijack) {
		kit.Pause()
	})

	go router.Run()

	s.page.MustSetExtraHeaders("test", "b")
	s.page.MustNavigate(url)

	kit.Pause()
}

I found it's impossible to get the RequestWillBeSentExtraInfo for a paused request. Unless chrome adds new APIs to support it, we can't do much about it.

ysmood avatar Aug 27 '20 23:08 ysmood

I raised an issue for chrome: https://bugs.chromium.org/p/chromium/issues/detail?id=1122782

Related issue: https://github.com/puppeteer/puppeteer/issues/5364#issuecomment-653825110

ysmood avatar Aug 27 '20 23:08 ysmood

One hacky solution is to use firefox as the user-agent, because it doesn't support the sec headers yet:

image

Sample code:

page := browser.MustPage("").MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
	UserAgent:      "Mozilla/5.0 (Macintosh; Intel Mac OS X 11.0; rv:82.0) Gecko/20100101 Firefox/82.0",
	AcceptLanguage: "en",
})
page.MustNavigate("https://example.com")

Or you can manually set the headers before sending it:

https://github.com/go-rod/rod/blob/3130979a0f746e973fd70b68ddf2ea14e3f7a0c3/hijack_test.go#L41

ysmood avatar Nov 15 '20 11:11 ysmood

#853

Fly-Playgroud avatar Apr 03 '23 01:04 Fly-Playgroud