问题描述
我在Rails Web应用程序上构建了一个ruby,该应用程序从“ https://www.ups.com/track/api/Track/GetStatus”解析UPS发货的跟踪信息。从昨天开始,我开始收到401错误,无法再检索货物的跟踪信息。
我尝试向我的请求添加“ X-XSRF-Token”标头。但是我仍然收到相同的“#
这是我尝试实现的代码:
uri = URI("https://www.ups.com/track/api/Track/GetStatus")
res = Net::HTTP.get_response(uri)
xsrf_token = res.to_hash['set-cookie'][1].split("\;")[0].split("X-XSRF-TOKEN-ST=")[1]
header = {
"Content-Type": "application/json","Accept": "application/json","X-Requested-With": "XMLHttpRequest","X-XSRF-Token": xsrf_token
}
body = {
"TrackingNumber": ["my ups tracking number"],}
request = Net::HTTP::Post.new(uri,header)
request.body = body.to_json
http = Net::HTTP.new(uri.host,uri.port)
http.use_ssl = true
response = http.request(request)
编辑(解决方案):
谢谢塔德曼的回答。一种解决方案的确是在请求中发送cookie。
header = {
"Content-Type": "application/json","X-XSRF-Token": xsrf_token,"Cookie": res.to_hash['set-cookie'][0]
}
解决方法
通常这样的令牌绑定到您的会话,通常是通过与请求一起发送的一个或多个cookie建立的,如果不存在这些cookie,则可能无效。
它也可能被锁定到特定的IP或浏览器。这些可以通过许多不同的方式实现。这样做的目的是使它尽可能不可重用,因此您必须与之抗争。
最后,使用cookie持久性建立自己的会话并为该任务获取新令牌可能会更容易。