我想使用具有以下特征的http客户端进行http调用:
- 不要遵循重定向(只需获取第一个调用的完整响应,该响应会返回302重定向代码)
- 能够接收cookie
因此,我正在寻找使用
我怎样才能做到这一点?
- 如何存储Cookie与如何检查重定向响应是一个完全独立的问题。
- 是的,这就是棘手的部分。 我可以使用transport.RoundTrip而不是http客户端来获得单个响应,但是我也在寻找一种可以检索cookie的解决方案。
- 当您使用http.Client时,CookieJar不能工作,但是在第一次重定向时停止吗?
- 是的,我正在尝试找出如何不使客户端进行重定向。
- 可能重复的问题:stackoverflow.com/questions/23297520/ stackoverflow.com/questions/14420222/
如果使用
如果初始请求收到错误,则此字段采用自定义函数,该函数可以处理任何重定向。
一个简单的例子可能是这样的:
1 2 3 4 5 | client: &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return errors.New("something bad happened") // or maybe the error from the request }, } |
您还可以返回
- 大!您能否提供任何示例代码,以便在响应302的情况下不遵循重定向?
- @DanieleB-我更新了我的答案以显示一个简单的实现。
- 谢谢,但是我不确定如何使用它。我想要的是:1)客户端不应遵循重定向; 2)我将能够获得重定向URL; 3)CookieJar照常工作
- 我应该如何处理该错误?
- 理想情况下,这应该等同于在客户端上设置"标记"以不遵循重定向,并且能够像往常一样检查cookieJar和响应
- @DanieleB:从CheckRedirect返回的错误是"标志"
- 我仍然不知道如何使用它。
- @DanieleB:您使用客户端,而不是错误。 1)此客户端不遵循重定向。 2)检查Location标头以找到重定向URL。 3)饼干罐应该工作。
- @沃尔克谢谢。因此,是否要在CheckRedirect函数中返回任何类型的错误以免跟随重定向就足够了?
- @DanieleB-是的,这是正确的。
- @DanieleB-您接受我的回答正确吗? :)
- 完成了!非常感谢
- 我刚刚实现了它,效果很好!我还意识到,甚至可以修改以下重定向的请求,从而更改重定向的url。好东西!