2017-08-11 3 views
2

私はHttpWebRequestを使用してクロスドメイン(jpnhttps://www.facebook.com/plugins/post/oembed.json/?url=posturl)からjson結果を取得しています。 ContentTypeとAcceptをapplication/jsonに設定しましたが、私はいつもtext/htmlの応答を受け取ります。期待される結果はJSONです。クロスドメインURLを呼び出すときのHttpWebRequestレスポンスは常にtext/htmlです

string result = string.Empty; 
var request = (HttpWebRequest)WebRequest.Create("https://www.facebook.com/plugins/post/oembed.json/?url=xxxxxx"); 

request.ContentType = "application/json; charset=utf-8"; 
request.Accept = "application/json"; 
request.Method = "POST";     

var response = (HttpWebResponse)request.GetResponse(); 
using (var streamReader = new StreamReader(response.GetResponseStream())) 
{ 
    result = streamReader.ReadToEnd(); 
} 
+0

は、あなたが得るために 'request.Method'を設定しようとしたことがありますか? – swatsonpicken

+0

@swatsonpickenはHTMLと同じ結果を試しました – James

+0

あなたの質問を編集/更新してレスポンスのHTTPステータスコードの言及を追加するにはhttps://stackoverflow.com/review/suggested-edits/17002205を使用してください。おそらく起こりそうなことは、リクエストに対する応答が200 OKではなく、4xxまたは5xxのエラーメッセージであることです。この場合、応答ボディは、リクエストがあった場合に期待されるJSONの代わりにHTMLエラーページになります成功した。 – sideshowbarker

答えて

5

私はあなたにもFacebookのから予想される結果ではなく埋め込まれたHTMLを取得するためのリクエストでブラウザエージェントを設定する必要があると思います。

のような何か:

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
+0

これはうまく動作しています。あなたがipadを含むすべてのブラウザで動作しています – James

+0

これはサーバー側で使用されるため、誰でもあなたのページで使用するブラウザーに関係なくです。私はFacebookがボットとクモを防ぐためにユーザーエージェントの反応を検証していると推測しています。 –

+0

あなたの答えをありがとう – James

関連する問題