Instagram订阅408请求超过2秒后超时

时间:2017-08-04 09:37:09

标签: .net asp.net-mvc instagram instagram-api

我目前正在尝试使用Instagram订阅功能为我的MVC网站用户创建“与Instagram同步”机制。现在我已经按照他们在api页面上描述的那样正确设置了所有内容:

  • 我将用户引导至其授权页面,成功获得授权。
  • 我为回调方法创建了一个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所做的回调。沿途有一些hickup,但现在它的工作原理。我不得不重写该调用的代码,因为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

                }

            }
        }

1 个答案:

答案 0 :(得分:2)

It is because of ngrok. I don't know why, but I had the same problem and after uploading the files on a web server, it worked.