【发布时间】:2021-07-13 01:31:41
【问题描述】:
美好的一天。我正在尝试用 Go 抓取这个 URL:
http://us2.m2web.talk2m.com/valleycarriers/Gorman%20Bros/usr/viewon/Overview.shtm
链条上有一个裂缝。我可以简单地向这个端点发送一个带有必要参数的 POST 请求,就像 Chrome 所做的那样,但即使 Chrome 这样做了,它也会在地址栏上弹出一个窗口,一个浏览器窗口,询问用户名和密码。因为响应头中的Cache-Clear 是must-revalidate。
所以我解雇了 Postman。并发送了一个 POST 相同的 url,但像这样:
https`://username:password@url
它返回了三个 cookie。我将这三个 cookie 提供给提供所需数据的端点:
https://u:p@us2.m2web.talk2m.com/valleycarriers/Gorman Bros/rcgi.bin/vows/readVars
并且得到了结果!
Postman 在发送第一个请求后连续发送两个请求。
我尝试在 Go 中替换它:
loginString := "account=valleycarriers&username=u&password=p&connect=connect&attempt=0"
requestLogin, err := http.NewRequest("POST", "http://u:p@us2.m2web.talk2m.com/valleycarriers/Gorman%20Bros/usr/viewon/Overview.shtm", strings.NewReader(loginString))
if err != nil {
log.Fatal(err)
}
requestLogin.Header.Add("Content-Type", "application/x-www-form-urlencoded")
requestLogin.Header.Add("Content-Length", "87")
requestLogin.Header.Add("Host", "us2.m2web.talk2m.com")
requestLogin.Header.Add("Authorization", "Basic b3BlcmF0b3I6b3BlcmF0b3IxMjM=")
但是这个请求不起作用。它返回两个 cookie,但 Postman 返回三个。 Postman 不返回正文,但返回登录页面。在 Postman 中,如果我将 cookie 从第一个请求传递到第二个请求,它会返回我想要的数据。但在 Go 中,它只是再次返回登录页面。
我尝试使用 Fiddler 检查来自 Go 的传出流量,但与 Postman 不同的是,Fiddler 不显示来自此端点的任何流量。
谢谢。
【问题讨论】:
标签: http go request postman endpoint