Facebook Oembed Response не возвращает Json

Я пытаюсь сделать запрос Get на конечную точку Facebook Oembed со стороны сервера. Когда я просто перехожу по URL-адресу в своем браузере, он работает (щелкните эту ссылку: https://www.facebook.com/plugins/video/oembed.json/?url=https%3A%2F%2Fwww.facebook.com%2Ffacebook%2Fvideos%2F10153231379946729%2F)

Однако при вызове со стороны сервера ответ не является объектом json.

      static void Main(string[] args)
       {
           string uri2 = "https://www.facebook.com/plugins/video/oembed.json/?url=https%3A%2F%2Fwww.facebook.com%2Ffacebook%2Fvideos%2F10153231379946729%2F";

           CreateLinkRequest call2 = new CreateLinkRequest();
           call2 = Get<CreateLinkRequest>(uri2);
           Console.ReadLine();
       }


       public static T Get<T>(string uri)
       {
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
           request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

           using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
           using (Stream stream = response.GetResponseStream())
           using (StreamReader reader = new StreamReader(stream))
           {
               string json = reader.ReadToEnd();
               Object result = new JavaScriptSerializer().Deserialize<T>(json);
               return (T)result;
           }
       }
   }

   public class CreateLinkRequest
   {

       public string provider_name { get; set; }
       public string author_name { get; set; }
       public string width { get; set; }
       public string author_url { get; set; }
       public string title { get; set; }
       public string type { get; set; }
       public string version { get; set; }
       public string thumbnail_width { get; set; }
       public string provider_url { get; set; }
       public string thumbnail_height { get; set; }
       public string html { get; set; }
       public int height { get; set; }
       public string thumbnail_url { get; set; }
   }

person Matthew Webster    schedule 27.03.2019    source источник
comment
Я получаю их страницу «обновите свой браузер», когда делаю «голый» запрос на стороне сервера для этого URL. Попробуйте добавить в запрос заголовок User-Agent, соответствующий текущему браузеру.   -  person 04FS    schedule 27.03.2019
comment
Выяснилось, что вы были на правильном пути, но мне пришлось установить свойства UserAgent и Refer в HttPWebRequest. Я думаю, Facebook хочет убедиться, что вы не бот.   -  person Matthew Webster    schedule 27.03.2019


Ответы (1)


Выяснилось, что вы были на правильном пути, но мне пришлось установить свойства UserAgent и Refer в HttPWebRequest. Я думаю, что Facebook хочет убедиться, что вы не бот

      public static T Get<T>(string uri)
       {
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.UserAgent = "Mozilla / 5.0(Windows; U; WindowsNT 5.1; en - US; rv1.8.1.6) Gecko / 20070725 Firefox / 2.0.0.6";
            request.Referer = "http://www.google.com";
           request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

           using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
           using (Stream stream = response.GetResponseStream())
           using (StreamReader reader = new StreamReader(stream))
           {
               string json = reader.ReadToEnd();
               Object result = new JavaScriptSerializer().Deserialize<T>(json);
               return (T)result;
           }
       }
   }
person Matthew Webster    schedule 27.03.2019
comment
Не работает для меня. stackoverflow.com/questions/61902621/ - person Jonas Arcangel; 26.05.2020