2

何らかの理由で、使用しているWeb APIからJSON結果をフェッチしようとすると、Visual Studioで403:Forbidden例外が発生します。WebブラウザでWebAPIURLを使用しようとすると、すべてが正常に表示されます。何か案は?

メインコード:

        theURI = "http://isitup.org/duckduckgo.com.json";
        HttpClient httpClient = new HttpClient();
        httpClient.MaxResponseContentBufferSize = Int32.MaxValue;
        var jsonResponse = await httpClient.GetStringAsync(theURI);

        var rootObject = JsonConvert.DeserializeObject<StatusMessage.RootObject>(jsonResponse);
        int statuscode = rootObject.status_code;

        if (statuscode == 1)
        {
            txtStatus.Text = "Website is UP!";
        }
        else if (statuscode == 2)
        {
            txtStatus.Text = "Website is DOWN!";
        }
        else
        {
            txtStatus.Text = "Invalid domain!";
        }

およびクラスファイル

class StatusMessage
{
    public class RootObject
    {
        public string domain { get; set; }
        public int port { get; set; }
        public int status_code { get; set; }
        public object response_ip { get; set; }
        public object response_code { get; set; }
        public object response_time { get; set; }
    }

}
4

1 に答える 1

2

デフォルトのユーザーエージェントを使用している場合、サーバーは403に応答するようです。これをchromeユーザーエージェントに変更すると、サーバーは正しく応答します。

var url = new Uri("http://isitup.org/duckduckgo.com.json");
var req = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, url);
message.Headers.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17");
var response = await req.SendAsync(message);
var responseString = await response.Content.ReadAsStringAsync();
于 2013-02-18T02:05:14.600 に答える