2 秒后 Instagram 订阅 408 请求超时
Instagram Subscription 408 Request Timeout after 2 seconds
我目前正在尝试使用 Instagram 订阅功能为我的 MVC 网站的用户创建一个 'sync with instagram' 机制。现在我已经正确设置了所有内容,就像他们在 api 页面上描述的那样:
- 我将用户引导至他们的授权页面,成功获得授权。
- 我为回调方法创建了一个 GET 和一个 POST 方法。测试它是否存在的 GET 与描述的参数 (hub.mode=subscribe&hub.challenge=test&hub.verify_token=mytoken) 一起工作,returns 挑战成功时我公开了它使用 ngrok 上网(这也有效)
- 然后我尝试订阅 2 秒后 立即崩溃并出现 408 请求超时的用户。对回调 url 的 GET 请求从未发生。
我还尝试稍微更改我在那个 post 请求中发送 instagram 的内容,如果我更改一件事,我会收到一个错误的请求而不是超时。
我还尝试创建自己的网络客户端来增加网络请求超时,但没有成功。
有没有人知道我做错了什么或者从哪里可以获得更多关于真正失败的信息? 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 Functions 以便能够快速测试 instagram 进行的回调。一路上有一些小问题,但现在可以了。我不得不重写调用的代码,因为 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
}
}
}
是因为ngrok。我不知道为什么,但我遇到了同样的问题,将文件上传到网络服务器后,它起作用了。
我目前正在尝试使用 Instagram 订阅功能为我的 MVC 网站的用户创建一个 'sync with instagram' 机制。现在我已经正确设置了所有内容,就像他们在 api 页面上描述的那样:
- 我将用户引导至他们的授权页面,成功获得授权。
- 我为回调方法创建了一个 GET 和一个 POST 方法。测试它是否存在的 GET 与描述的参数 (hub.mode=subscribe&hub.challenge=test&hub.verify_token=mytoken) 一起工作,returns 挑战成功时我公开了它使用 ngrok 上网(这也有效)
- 然后我尝试订阅 2 秒后 立即崩溃并出现 408 请求超时的用户。对回调 url 的 GET 请求从未发生。
我还尝试稍微更改我在那个 post 请求中发送 instagram 的内容,如果我更改一件事,我会收到一个错误的请求而不是超时。 我还尝试创建自己的网络客户端来增加网络请求超时,但没有成功。
有没有人知道我做错了什么或者从哪里可以获得更多关于真正失败的信息? 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 Functions 以便能够快速测试 instagram 进行的回调。一路上有一些小问题,但现在可以了。我不得不重写调用的代码,因为 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
}
}
}
是因为ngrok。我不知道为什么,但我遇到了同样的问题,将文件上传到网络服务器后,它起作用了。