Im folgenden Beitrag werden HttpClients unter Windows 10 vorgestellt, welche eine Webseite lesen sollen.
Der eine HttpClient schaltet den internen Cache ab. Dadurch wird verhindert, dass immer die gleiche Webseite zurückkommt, obwohl ein anderer Parameter in der Webadresse eingegeben wurde.
Der zweite HttpClient behebt das Problem, wenn ein Webserver die Webadressen weiterleitet.
https://readdy.net/User_Files/Notes/Images/Image_576_0_blog.jpg" width="644" height="476">
1) HttpClient mit ausgeschaltetem Cache
Problem: es wird immer das gleiche Ergebnis als String zurückgegeben, obwohl sich die Web-URL in den Query-Parametern ändert.
Lösung: hier muss der Web-Cache ausgeschaltet werden
Hierzu muss man den Namespace Windows.Web.Http verwenden
using Windows.Web.Http; //*http cache |
C# Code Beispiel
Aufruf eins HttpClient mit deaktiviertem Cache
Erst erstellt man einen Protokol-Filter
Diesen Filter kann man den CacheControl Verhalten auf NoCache einstellen
public static async Task<HtmlDocument> Web_Get_HtmlDocument(string sURL) { //------------< fx_read_Page() >------------ //* get the HTML Document of a website-URL try { //-< init >- //< HttpClient > //*noCache HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter(); filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.NoCache; filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.Default;
HttpClient client = new HttpClient(filter);
//httpClient string sHTML = ""; //Client Request as string try { sHTML = await client.GetStringAsync(new Uri(sURL)); } catch (Exception ex) { //clsSys.show_Message(ex.Message); clsSys.fx_Log("Error httpClient: " + ex.Message); return null; } //</ HttpClient > //-</ init >-
clsSys.fx_Log("read HTML=" + sHTML.Substring(0, 10) + "..");
//< get HTMLdocument > //*create and load to local HtmlDocument HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(sHTML); //</ get HTMLdocument >
//< output > return doc; //</ output > } catch (Exception ex) { clsSys.fx_Log("ERROR get HtmlDocument URL=" + sURL + " Msg:" + ex.Message ); return null; }
//------------</ fx_read_Page() >------------ } |
2) HttpClient mit automatischer Umleitung
Wenn ein Webserver die Webseiten intern weiterleitet, dann erfolgt normalerweise beim HttpClient eine Fehlermeldung 404 oder ähnliches.
Um den HttpClient anzuweisen, auch der Weiterleitung wie beim Browser zu folgen, muss man den Client unter System.Net.Http mit einem HttpClientHandler erstellen
Namespace HttpClient
using System.Net.Http; //*HttpClientHandler |
Beispiel-Code zum Erstellen eines HttpClient mit aktivierter Weiterleitung der Webseiten
public static async Task<HtmlDocument> Web_Get_HtmlDocument(string sURL) { //------------< fx_read_Page() >------------ //* get the HTML Document of a website-URL try { //-< init >- //< HttpClient >
HttpClientHandler handler = new HttpClientHandler(); handler.AllowAutoRedirect = true; HttpClient httpClient = new HttpClient(handler);
//httpClient string sHTML = ""; //Client Request as string try { sHTML = await httpClient.GetStringAsync(sURL); } catch (Exception ex) { //clsSys.show_Message(ex.Message); clsSys.fx_Log("Error httpClient: " + ex.Message); return null; } //</ HttpClient > //-</ init >-
clsSys.fx_Log("read HTML=" + sHTML.Substring(0, 10) + "..");
//< get HTMLdocument > //*create and load to local HtmlDocument HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(sHTML); //</ get HTMLdocument >
//< output > return doc; //</ output > } catch (Exception ex) { clsSys.fx_Log("ERROR get HtmlDocument URL=" + sURL + " Msg:" + ex.Message ); return null; }
//------------</ fx_read_Page() >------------ }
|
# UWP: Universal Windows Platform