我在便携式类库得到403的HttpClient [英] I'm getting 403 with HttpClient on Portable Class Library

查看:359
本文介绍了我在便携式类库得到403的HttpClient的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个PCL,WP和WinStore项目。在PCL项目我有这个方法的类:

I have a PCL, WP and WinStore projects. In the PCL project I have a class with this method:

    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应用商店项目。相反,我收到此错误消息:

When I invoke the method on the Windows Phone project works perfectly, but not in the Windows Store project. Instead, I'm getting this error message:

推荐答案

看来你需要凭据,并在API,而不是指向,这就是为什么它的禁伐

It seems you need credentials and to point at the api instead , that's why its "Forbiden"

尝试调用它就像一个浏览器:此的其他问题 HttpClient的请求喜欢的浏览器

Try calling it like a browser : from this other question "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();
    }
}



//注:我注释掉的压缩,

//Note :I commented out the compression,

这篇关于我在便携式类库得到403的HttpClient的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆