http - Go 的 http 库和 Postman 的结果不同——Postman 可以工作,但 Go 不能
问题描述
再会。我正在尝试用 Go 抓取这个 URL:
http://us2.m2web.talk2m.com/valleycarriers/Gorman%20Bros/usr/viewon/Overview.shtm
链条上有一个裂缝。我可以简单地向这个端点发送一个带有必要参数的 POST 请求,就像 Chrome 所做的那样,但即使 Chrome 这样做了,它也会在地址栏上弹出一个窗口,一个浏览器窗口,询问用户名和密码。因为Cache-Clear
响应头是must-revalidate
.
所以我解雇了邮递员。并发送了一个 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 不显示来自此端点的任何流量。
谢谢。
解决方案
推荐阅读
- android - 谷歌登录后应用返回登录页面(Flutter+firebase)
- flutter - 安装在 Flutter 中是什么意思?为什么使用它?
- wordpress - 在 Wordpress 中注册之前检查外部数据库
- javascript - 如何访问另一个模型的数据库以在 Django 的当前模型字段中执行一些计算?
- r - 是否有一个 R 函数来查找列表中元素的下一个位置
- javascript - React Axios Post 已经附加 Bearer Token 仍然得到 401 Unauthorized
- wagtail - FieldPanel 未能反映在 content_panels 上
- sorting - Sortperm 用于 Julia lang 中的矩阵排序
- excel - Expression.Error:我们无法将值 null 转换为文本类型。详细信息:值=类型=类型
- google-analytics - 通过访问论坛页面对 Google Analytics(分析)数据进行细分