Ruby: 从UPS获取跟踪信息API (无需登录)
Ruby: Get the tracking information from the UPS API (without login)
我在 rails 上构建了一个 ruby Web 应用程序,用于解析来自“https://www.ups.com/track/api/Track/GetStatus”的 UPS 货运跟踪信息。从昨天开始,我开始收到 401 错误,我再也无法检索到货件的跟踪信息。
我试图在我的请求中添加“X-XSRF-Token”header。但我仍然收到相同的“#”响应,其 body 等于 {"unauthorized":401}。我做错了什么吗?
这是我尝试实现的代码:
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",
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest",
"X-XSRF-Token": xsrf_token,
"Cookie": res.to_hash['set-cookie'][0]
}
通常情况下,此类令牌会绑定到您的会话,通常是通过一个或多个与请求一起发送的 cookie 建立的,如果没有这些 cookie,它可能无效。
它也可能被锁定到特定的IP或浏览器。这些可以通过许多不同的方式实现。我们的想法是让它尽可能 non-reusable,所以你将不得不与之抗争。
最后,使用 cookie 持久性建立您自己的会话并为此任务获取新令牌可能会更容易。
我在 rails 上构建了一个 ruby Web 应用程序,用于解析来自“https://www.ups.com/track/api/Track/GetStatus”的 UPS 货运跟踪信息。从昨天开始,我开始收到 401 错误,我再也无法检索到货件的跟踪信息。
我试图在我的请求中添加“X-XSRF-Token”header。但我仍然收到相同的“#
这是我尝试实现的代码:
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",
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest",
"X-XSRF-Token": xsrf_token,
"Cookie": res.to_hash['set-cookie'][0]
}
通常情况下,此类令牌会绑定到您的会话,通常是通过一个或多个与请求一起发送的 cookie 建立的,如果没有这些 cookie,它可能无效。
它也可能被锁定到特定的IP或浏览器。这些可以通过许多不同的方式实现。我们的想法是让它尽可能 non-reusable,所以你将不得不与之抗争。
最后,使用 cookie 持久性建立您自己的会话并为此任务获取新令牌可能会更容易。