2016-09-29 2 views
1

Ist es möglich, eine Webanfrage zu stellen, um nur textbasierte Daten von einer Website zu erhalten? Und wenn es so ist, wie soll ich das machen?Bild-Download für HttpWebRequest deaktivieren

Das einzige, was ich mir vorstellen kann, ist in der Antwort-Zeichenfolge suchen und entfernen Sie alle Bild-Tags. Aber das ist eine sehr schlechte Art und Weise, dies zu tun ...

EDIT: Das ist mein Code-Schnipsel:

  string baseUrl = kvPair.Value[0]; 
      string loginUrl = kvPair.Value[1]; 
      string notifyUrl = kvPair.Value[2]; 
      cc = new CookieContainer(); 
      string loginDetails = DataCollector.GetLoginDetails(baseUrl, ref cc); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginUrl); 
      request.Method = "POST"; 
      request.Accept = "text/*"; 
      request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; 
      request.CookieContainer = cc; 
      request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"; 
      Byte[] data = Encoding.ASCII.GetBytes(loginDetails); 
      request.ContentLength = data.Length; 
      using (Stream s = request.GetRequestStream()) 
      { 
       s.Write(data, 0, data.Length); 
      } 
      HttpWebResponse res = (HttpWebResponse)request.GetResponse(); 
      request = (HttpWebRequest)WebRequest.Create(notifyUrl); 
      request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"; 
      request.CookieContainer = cc; 
      res = (HttpWebResponse)request.GetResponse(); 
      Stream streamResponse = res.GetResponseStream(); 
      using (StreamReader sr = new StreamReader(streamResponse)) 
      { 
       ViewData["data"] += "<div style=\"float: left; margin-bottom: 50px;\">" + sr.ReadToEnd() + "</div>"; 
      } 
+1

versuchen Header nur Texteinstellung akzeptieren/html – Crowcoder

+1

Versuchen Sie, die [Accept] (https: //msdn.microsoft.com/en-us/library/system.net.httpwebrequest.accept(v=vs.110).aspx) Eigenschaft. –

+0

@Crowcoder nein das hat nicht funktioniert – Snickbrack

Antwort

0

fand ich mir eine gute Codierung Lösung:

public static string StripImages(string input) 
{ 
    return Regex.Replace(input, "<img.*?>", String.Empty); 
} 

dies tötet alle Bilder aber nur, sobald Sie alle Bilder geladen haben, so gibt es keine Einsparungen in übertragenen Daten in dieser Lösung ...

0

Die HTTP/1.1 Header Field Definitions 'Abschnitt 14.1 enthält die Akzeptieren Headerdefinition. Es gibt folgendes an:

... Wenn ein Accept-Header-Feld vorhanden ist und der Server keine Antwort senden kann, die gemäß dem kombinierten Feldwert Accept zulässig ist, SOLLTE der Server 406 senden (nicht akzeptable) Antwort.

Es ist also Sache des Servers, wenn er die Anfrage des Clients berücksichtigt.

Ich habe festgestellt, dass die meisten Server den Header Accept ignorieren. Bis jetzt habe ich nur eine Ausnahme gefunden: es ist GitHub. Ich habe die GitHub Homepage mit Audio als Accept Parameter angefordert. Und es reagiert entsprechend mit Antwortcode 406.

Versuchen Sie das folgende Snippet für eine Demo, sollten Sie System.Net.WebException: The remote server returned an error: (406) Not Acceptable. bekommen

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://github.com/"); 
request.Method = "GET"; 
request.Accept = "audio/*"; 

var response = request.GetResponse();