HTTPClient 返回 HttpRequestException WinRT

Posted

技术标签:

【中文标题】HTTPClient 返回 HttpRequestException WinRT【英文标题】:HTTPClient returning HttpRequestException WinRT 【发布时间】:2013-02-17 20:21:13 【问题描述】:

由于某种原因,当我尝试从我正在使用的 Web API 获取 JSON 结果时,我在 Visual Studio 中收到 403: Forbidden 异常。当我尝试在 Web 浏览器中使用 Web API URL 时,一切都按原样显示。有任何想法吗?

主要代码:

        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; 
    


【问题讨论】:

嗯,大概您的浏览器正在发送某种身份验证... @JonSkeet 是的,想过这个,但我不知道会在哪里。 请使用 Wireshark 或类似的工具来准确地查看您的浏览器发送的内容。 尝试使用 Firefox 的实时 HTTP 标头来检查身份验证密钥或类似的东西,但找不到任何东西。 Wireshark 可以告诉我更具体的东西吗?我不认为 WinCap 可以安装在 Windows 8 上。 1.检查饼干。您的浏览器可能会发送它们,而您的应用程序不会。 2.尝试更改用户代理,可能默认一个被服务器禁止 【参考方案1】:

如果您使用默认用户代理,服务器似乎会响应您 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();

【讨论】:

正常工作!谢谢,提姆。 在尝试使用必应地图位置 API 时遇到此问题。谢谢!

以上是关于HTTPClient 返回 HttpRequestException WinRT的主要内容,如果未能解决你的问题,请参考以下文章

httprequest 未发送到有效的服务器

新的 HttpClient 代理设置问题

自己封装的HttpRequest,个人觉的比较HttpHelper好用

使用httpclient 调用selenium webdriver

使用状态拦截带有第三方扩展的 HttpClient

JMeter 使用 http长连接 |史上最全