ruby - 通过 Faraday 向 GitHub API 发出请求时,我不断收到错误的状态代码(400、401、403)

标签 ruby api github oauth faraday

我正在开发一个 Ruby 小程序,用于从我的 Pocket 帐户收集 GitHub URL,然后在我的 GitHub 帐户上为这些存储库加注星标。我已经能够连接到 Pocket 的 API 并从我的提要中获取 URL,但是我在处理对“https://api.github.com/user/starred”端点的请求时遇到了问题。

这是我正在使用的

我最初在我的 Mac 上使用 Paw 来获取 Pocket 和 GitHub 的授权 token ——Pocket API 在 Paw 和我的 Rub 中都工作得很好,但 GitHub 请求只在 Paw 中工作。

我已经尝试了两种 Faraday 请求语法(您可以在代码中看到它们),使用 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”,看看是否有帮助。

关于ruby - 通过 Faraday 向 GitHub API 发出请求时,我不断收到错误的状态代码(400、401、403),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347496/

相关文章:

git - 从 RStudio 推送到 Github

ruby - 使用大小写/检查负数时

windows - 在 Ruby 中使用 Windows 窗体

javascript - 维护 REST API 调用状态

javascript - 如何通过服务器从前端发出 API 请求,以便最终用户看不到我的 API key ?

github - 使用 Github API 是否可以确定一个分支是否在默认分支之前?

git - ssh:连接到主机 github.com 端口 22:连接超时致命:无法从远程存储库读取

ruby - 在 Ruby 中将空字符串转换为 nil

ruby - 如何在特定队列中推送作业并使用 sidekiq 限制工作人员数量?

api - 搜索特定 URL 的推文 Twitter API 1.1