API通过Heroku自定义域,主机名不在DNS缓存中

时间:2016-09-06 03:14:26

标签: ruby-on-rails curl heroku dns

我正在尝试将我在Heroku上的网站连接到一个API,该API从另一个单独的网站检索用户的购物数据。

我可以使用命令行和浏览器成功连接到API;但我不能在生产中做同样的事情。当我尝试这样做时,我在日志Hostname was NOT found in DNS cache中收到错误。

我怀疑这是因为我的自定义域已经注册了Oauth重定向,而不是我的 Heroku 域。

我可以为Oauth重定向设置其他域名。在向API管理员提出设置addt&l; l域名的请求之前,如果有人能够确认或否认这是我的问题的原因,并且设置我的Heroku域名将解决它,我将不胜感激;或者如果有办法我可以专门使用我的自定义域,这似乎更直接。

谢谢!我在下面提供了一些细节。

通过命令行和浏览器成功调用API

直接用户登录OAuth2(我在网络浏览器中执行此操作): https://www.example.com/shop/oauth2/?response_type=code&client_id={client_id}&state={some_unique_state}&redirect_uri={your_site_url}

成功登录用户,浏览器重定向到: {your_site_url}?code={auth code}&state={some_unique_state echoed back}

然后我使用以下curl命令中的重定向url中提供的代码。

获取令牌和jsessionid: curl -v -X POST -u {client_id}:{client_secret} -H "Content-Length: 0" "https://www.example.com/api/v2.0/token?code={code}"

jsessionid和token用于以下curl命令。

检索数据: curl -H "Authorization: Bearer {token}" "https://www.example.com/api/v2.0/user/cart;jsessionid={jsessionid}?flags=true"

尝试在生产中做同样的事情(Heroku,rails)

在制作中,我可以成功地让用户通过Oauth2登录并生成身份验证代码。我尝试通过控制器方法中的curl命令获取令牌和jsessionid后收到DNS错误消息。我已经确认curl适用于该控制器方法中的一个简单任务(呈现http://www.google.com);我还确认我已成功汇总该方法中所有需要的变量。与通过本地计算机上的命令行相比,通过生产中的控制器方法执行完全相同的curl命令失败。

感谢您提供的任何线索;我对API集成相对较新,所以我肯定会遗漏一些基本的东西。

1 个答案:

答案 0 :(得分:0)

问题是API团队阻止了我的IP地址,因为它来自Heroku。出于安全原因,该公司会阻止来自云提供商的IP地址。所以我必须得到一个静态API,然后让团队将其列入白名单。

我通过Heroku' Proximo获得了静态IP。然后,我在向API发出请求时必须使用RestClient来调用静态IP。

在我的控制器方法中:

RestClient.proxy = ENV["PROXIMO_URL"] if ENV["PROXIMO_URL"]
retrieve_rest = RestClient::Request.execute(
  method: :get,
  :url => the_url,
  :headers => {"Authorization": "Bearer #{token}"})
    {|response, request, result| response }
result = JSON.parse(retrieve_rest)