2017-08-04 129 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