通过 Faraday 向 GitHub API 发出请求时,我不断收到错误的状态代码(400、401、403)
I keep receiving bad status codes (400, 401, 403) when making a request to the GitHub API via Faraday
我正在开发一个 Ruby 小程序,用于从我的 Pocket 帐户收集 GitHub URL,然后在我的 GitHub 帐户上为这些回购加注星标。我已经能够连接到 Pocket 的 API 并从我的提要中获取 URL,但是我在请求“https://api.github.com/user/starred”端点时遇到了问题。
我用的就是这个
我最初在 Mac 上使用 Paw 来获取 Pocket 和 GitHub 的授权令牌 - Pocket API 在 Paw 和我的 Rub 中都运行良好,但是GitHub 请求仅适用于 Paw。
我尝试了两种法拉第请求语法(您可以在代码中看到它们),使用 Faraday.new 和简单的 Faraday.get
require 'faraday'
require 'json'
github = Faraday.new(
url: 'https://api.github.com/user/starred',
headers: {
'Accept ': 'application/vnd.github.v3+json',
'Authorization': 'Bearer ***SUPER_SECRET_SAUCE***',
'User-Agent': 'jriggles'
}
)
pocket = Faraday.get(
'https://getpocket.com/v3/get?consumer_key=***MY_POCKET_KEY**&access_token=***MY_POCKET_TOKEN***&contentType=article&detailType=simple&sort=newest&domain=github.com&count=100',
'Content-Type': 'application/json; charset=UTF8',
'X-Accept': 'application/json',
'User-Agent': 'jriggles'
)
if pocket.status == 200
parsed_response = JSON.parse(pocket.body)
parsed_response['list'].each do |_key, val|
owner = val['given_url'].split('/')[3]
repo = val['given_url'].split('/')[4]
puts github.get("/#{owner}/#{repo}").status
end
else puts "Connection to Pocket failed - Code #{pocket.status}"
end
这是返回 HTTP 状态代码的行:
puts github.get("#{owner}/#{repo}").status
我已经尝试了一些排列,但我只得到了 [401]、[403],并且在当前迭代中得到了 [400]。我不确定这是我的 GitHub 授权问题还是我的 Faraday 语法问题,或者两者都有问题。
似乎使用 Faraday 进行口袋请求对您有用,这表明您可能正在正确使用它。
查看 GitHub 文档 https://developer.github.com/v3/#authentication 我建议将 'Bearer' 替换为 'token' 看看是否有帮助。
我想通了!我是土豆
我的 GitHub API 请求的 header 参数有错别字:
'Accept ': 'application/vnd.github.v3+json'
应该是
'Accept': 'application/vnd.github.v3+json',
我在 'Accept' 之后有一个 space!
我正在开发一个 Ruby 小程序,用于从我的 Pocket 帐户收集 GitHub URL,然后在我的 GitHub 帐户上为这些回购加注星标。我已经能够连接到 Pocket 的 API 并从我的提要中获取 URL,但是我在请求“https://api.github.com/user/starred”端点时遇到了问题。
我用的就是这个
我最初在 Mac 上使用 Paw 来获取 Pocket 和 GitHub 的授权令牌 - Pocket API 在 Paw 和我的 Rub 中都运行良好,但是GitHub 请求仅适用于 Paw。
我尝试了两种法拉第请求语法(您可以在代码中看到它们),使用 Faraday.new 和简单的 Faraday.get
require 'faraday'
require 'json'
github = Faraday.new(
url: 'https://api.github.com/user/starred',
headers: {
'Accept ': 'application/vnd.github.v3+json',
'Authorization': 'Bearer ***SUPER_SECRET_SAUCE***',
'User-Agent': 'jriggles'
}
)
pocket = Faraday.get(
'https://getpocket.com/v3/get?consumer_key=***MY_POCKET_KEY**&access_token=***MY_POCKET_TOKEN***&contentType=article&detailType=simple&sort=newest&domain=github.com&count=100',
'Content-Type': 'application/json; charset=UTF8',
'X-Accept': 'application/json',
'User-Agent': 'jriggles'
)
if pocket.status == 200
parsed_response = JSON.parse(pocket.body)
parsed_response['list'].each do |_key, val|
owner = val['given_url'].split('/')[3]
repo = val['given_url'].split('/')[4]
puts github.get("/#{owner}/#{repo}").status
end
else puts "Connection to Pocket failed - Code #{pocket.status}"
end
这是返回 HTTP 状态代码的行:
puts github.get("#{owner}/#{repo}").status
我已经尝试了一些排列,但我只得到了 [401]、[403],并且在当前迭代中得到了 [400]。我不确定这是我的 GitHub 授权问题还是我的 Faraday 语法问题,或者两者都有问题。
似乎使用 Faraday 进行口袋请求对您有用,这表明您可能正在正确使用它。
查看 GitHub 文档 https://developer.github.com/v3/#authentication 我建议将 'Bearer' 替换为 'token' 看看是否有帮助。
我想通了!我是土豆
我的 GitHub API 请求的 header 参数有错别字:
'Accept ': 'application/vnd.github.v3+json'
应该是
'Accept': 'application/vnd.github.v3+json',
我在 'Accept' 之后有一个 space!