2016-09-06 21 views
1

我試圖將我的網站(Heroku上)連接到從另一個單獨網站檢索用戶購物數據的API。API通過Heroku自定義域,主機名不在DNS緩存中

我可以使用命令行和我的瀏覽器成功連接到API;但我不能在生產中做同樣的事情。當我嘗試這樣做時,我收到日誌Hostname was NOT found in DNS cache中的錯誤。

我懷疑這是因爲我的定製域名已被註冊的Oauth重定向,但不是我的Heroku

我可以爲Oauth重定向設置其他域。在向API管理員提出設置addt'l域名的請求之前,如果有人能夠確認或否認這是我的問題的原因,並且設置我的Heroku域名能夠解決問題,我將不勝感激。或者如果有方法我可以獨佔使用我的自定義域,這看起來更直接。

謝謝!我在下面提供了一些細節。

通過命令行和瀏覽器成功的API調用

用戶直接到OAuth2登錄(我做這部分在Web瀏覽器): 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}

然後我使用在重定向url中提供的代碼在fo放捲曲命令。

獲得令牌和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和令牌下面的curl命令使用。

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

不成功嘗試做相同的生產(Heroku上,軌道)

在生產中,我能順利通過的oauth2登錄獲取用戶並生成授權碼。在嘗試通過控制器方法中的curl命令獲取令牌和jsessionid後,我收到DNS錯誤消息。我已經確認,捲曲適用於該控制器方法中的簡單任務(呈現http://www.google.com);而且我也證實,我正在成功組裝所有需要的變量。通過生產中的控制器方法執行時,與通過本地機器上的命令行執行相比,完全相同的curl命令失敗。

謝謝您提供的任何線索;我對API集成相對來說比較陌生,所以我肯定會錯過一些基本的東西。

回答

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)