6

Ich habe ein PCL, WP und WinStore-Projekte. Im PCL-Projekt habe ich eine Klasse mit dieser Methode:Ich bekomme 403 mit HttpClient auf Portable Class Library

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

Wenn ich die Methode auf dem Windows Phone Projekt aufrufen funktioniert perfekt, aber nicht in dem Projekt Windows Store. Stattdessen ich diese Fehlermeldung bekommen:

Message 403

Antwort

7

Es Sie Anmeldeinformationen benötigen scheint und stattdessen an der api-zu-Punkt, das ist, warum seine „Forbiden“

Probieren Sie es wie ein Browser aufrufen: von diese andere Frage "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(); 
    } 
} 

// Hinweis: ich aus der Kompression kommentierte

+1

hey du wirklich nicht wissen, wie m Das hat mir den Hals gerettet. Ich benutzte Parallel.Für einige Web-Aktivitäten und es dauerte über eine Minute, um abzuschließen. Dies hat die Endabrechnung auf weniger als 30 Sekunden gebracht, und ich bin mir sicher, dass ich mich weiter verbessern kann. Danke ein Triller ... –