Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

HttpClient : Deaktivierter Cache und aktive Weiterleitung

10.07.2018 (👁8640)

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.

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