我在可移植类库上使用HttpClient获得403

狄奥米德斯·多明格斯(Diomedes Dominguez)

我有一个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 Store项目中却无法。相反,我收到此错误消息:

讯息403

看来您需要凭证并指向api,这就是其“禁止”的原因

尝试像浏览器一样调用它:从另一个问题“像浏览器一样的HttpClient请求

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();
    }
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我不能在可移植类库中使用动态功能吗?

来自分类Dev

使用C#可移植库中的F#可移植类库

来自分类Dev

可移植类库反射

来自分类Dev

ReactiveUI +可移植类库?

来自分类Dev

可移植类库与类库

来自分类Dev

使用Xamarin在可移植类库中保护WCF绑定

来自分类Dev

在面向.net 4的可移植类库中使用ICommand

来自分类Dev

如何在可移植类库中使用TypeForwardedTo?

来自分类Dev

在Windows Phone项目中使用可移植类库

来自分类Dev

在(PCL)可移植类库中使用Windows.Networking

来自分类Dev

C#可移植类库-使用图像

来自分类Dev

在可移植类库中使用F#JsonProvider失败

来自分类Dev

为什么要在Xamarin中使用可移植类库?

来自分类Dev

使用可移植类库作为COM接口

来自分类Dev

在 Xamarin 可移植类库中使用 FluentMigrator

来自分类Dev

可移植类库与库项目

来自分类Dev

为什么我不能使用Xamarin在可移植类库中引用System.Net.Sockets?

来自分类Dev

StreamReader和可移植类库

来自分类Dev

从可移植类库加载的图像

来自分类Dev

可移植类库反射GetField

来自分类Dev

Xamarin共享项目与可移植类库

来自分类Dev

实体框架和可移植类库

来自分类Dev

编写可移植类库的语言

来自分类Dev

实体框架和可移植类库

来自分类Dev

Xamarin可移植类库问题

来自分类Dev

NUnit用于可移植类库测试

来自分类Dev

如何在Nuget包中定位我的可移植类库?

来自分类Dev

创建可移植类库的原因(在体系结构意义上)?

来自分类Dev

当接口位于可移植类库中时,PEVerify在显式接口属性上失败