c# - 我在可移植类库上使用 HttpClient 得到 403

标签 c# web-services windows-8 windows-phone portable-class-library

我有一个 PCL、WP 和 WinStore 项目。在 PCL 项目中,我有一个使用这种方法的类:

    private async Task<string> GetIpAddress()
    {
        const string url = "http://www.ip-adress.com/";
        const string buscar = "<h3>Your IP address is:";

        var client = new HttpClient();
        var data = await client.GetStringAsync(url);
        if (data.IndexOf(buscar, StringComparison.Ordinal) <= -1) return;
        var IpAddress = data.Remove(0, data.IndexOf(buscar, StringComparison.Ordinal) + buscar.Length + 1);
        IpAddress = IpAddress.Remove(IpAddress.IndexOf("</h3>", StringComparison.Ordinal));
        return IpAddress;
    }

当我在 Windows Phone 项目上调用该方法时,效果很好,但在 Windows 应用商店项目中却不行。相反,我收到此错误消息:

Message 403

最佳答案

看来您需要凭据并改为指向 api,这就是它的“Forbiden”的原因

尝试像浏览器一样调用它:来自另一个问题“HttpClient Request like browser

void Main()
{

    GetIP("http://www.ip-adress.com/");

}

async void GetIP(string url){
    try{
    "Looking Up".Dump("OK");
    var x = await  GetResponse(url);
    x.Dump();
    }
    catch(Exception e){
        e.Dump("Problems:");
    }
}

private static async Task<string> GetResponse(string url)
{
    var httpClient = new HttpClient();

    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

    var response = await httpClient.GetAsync(new Uri(url));

    response.EnsureSuccessStatusCode();
    using (var responseStream = await response.Content.ReadAsStreamAsync())
    //using (var decompressedStream = new System.IO.Compression.GZipStream(responseStream, CompressionMode.Decompress))
    using (var streamReader = new StreamReader(responseStream))
    {
        return streamReader.ReadToEnd();
    }
}

//注意:我注释掉了压缩,

关于c# - 我在可移植类库上使用 HttpClient 得到 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441688/

相关文章:

c# - 是否可以编写一个 IIS URL 重写规则来检查 HTTP Post 的内容?

c# - 只读集合 c# wp7 不支持操作

c# - 在某些字符前后修剪字符串

windows - 将变量值打印到控制台 visual c++ windows store Modern UI app

c# - 如何使用 .wer 文件调试应用程序

c# - Python中的yield和C#中的yield之间的区别

web-services - 如何在 Tomcat 中查看所有有效的 URL?

android - 如何在没有内存不足的情况下将大数据从 Web 服务检索到 Android?

jquery - 使用 JQuery 调用 WebMethod

c# - WebAuthenticationBroker.AuthenticateAsync 抛出异常