2017-08-04 46 views
0

我目前正在嘗試使用instagram訂閱功能爲我的MVC網站的用戶創建'與Instagram同步'機制。現在我已經正確設置了所有設置,就像它們在其api頁面上描述的那樣:Instagram訂閱408請求超時2秒後

  • 我指示用戶訪問其授權頁面,以成功獲取授權。
  • 我爲回調方法創建了一個GET和POST方法。 GET測試它是否與所描述的參數一致(hub.mode = subscribe & hub.challenge = test & hub.verify_token = mytoken),當成功時返回挑戰,並使用ngrok將其公開)
  • 然後我試圖訂閱用戶,其中在2秒後立即崩潰408請求超時。回調網址的GET請求從不發生。

我也嘗試稍微改變我發送instagram的那個帖子請求,如果我改變了一件事我得到一個錯誤的請求,而不是超時。 我也試圖創建我自己的webclient來提高Web請求超時而沒有運氣。

有沒有人有一個想法,我做錯了什麼或在哪裏得到更多的信息真的失敗了? Instagram文檔相當缺乏。

這裏是與408崩潰的代碼:

 NameValueCollection parameters = new NameValueCollection(); 
     parameters.Add("client_id", "SECRET"); 
     parameters.Add("client_secret", "SECRET"); 
     parameters.Add("object", "user"); 
     parameters.Add("aspect", "media"); 
     parameters.Add("verify_token", VerifyToken); 
     parameters.Add("callback_url", new Uri(baseUri, "api/manage/instagramSubscription").AbsoluteUri); 

     var client = new WebClient(); 
     var result = client.UploadValues("https://api.instagram.com/v1/subscriptions/", "POST", parameters); 

編輯:方案來解決問題

現在的問題是像tompec的解決方案,以避免ngrok。我試圖聯繫到instagram爲什麼ngrok不工作,但一直沒有答案。我切換到Azure功能,以便能夠快速測試Instagram所做的回調。有一些hickups一路上,但現在它的作品。我不得不爲通話重寫代碼,因爲instagram只接受此通話的表單數據。

var encoding = new ASCIIEncoding(); 
     var postData = "client_id=YOURCLIENTID"; 
     postData += "&client_secret=YOURSECRET"; 
     postData += ("&object=user"); 
     postData += ("&aspect=media"); 
     postData += ("&verify_token=" + VerifyToken); 
     postData += ("&callback_url=" + baseUri.AbsoluteUri); 
     byte[] data = encoding.GetBytes(postData); 

     var myRequest = 
      (HttpWebRequest)WebRequest.Create("https://api.instagram.com/v1/subscriptions/"); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/x-www-form-urlencoded"; 
     myRequest.ContentLength = data.Length; 
     using (var newStream = myRequest.GetRequestStream()) 
     { 
      newStream.Write(data, 0, data.Length); 
     } 

     InstagramSubscriptionResponseViewModel instaResponse = null; 
     using (var response = myRequest.GetResponse()) 
     { 
      var responseStream = response.GetResponseStream(); 
      if (responseStream != null) 
      { 
       using (var responseReader = new StreamReader(responseStream)) 
       { 
        var result = responseReader.ReadToEnd(); 

        // do whatever you want 

       } 

      } 
     } 

回答

2

這是因爲ngrok。我不知道爲什麼,但是我遇到了同樣的問題,並且在將文件上傳到網絡服務器後,它工作正常。

+0

感謝隊友,這是因爲ngrok。它指出我在正確的方向:)我用我的最終解決方案代碼更新了我的問題 – Hypi