Heim  >  Artikel  >  Backend-Entwicklung  >  Methode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren

Methode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren

Y2J
Y2JOriginal
2017-04-20 17:26:432921Durchsuche

Der folgende Editor bringt Ihnen einen Artikel darüber, wie Sie HTTP-Anfragen simulieren, um den automatischen Betrieb und die Datenerfassung von Webseiten zu realisieren. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Kommen Sie und werfen Sie einen Blick mit dem Herausgeber

Vorwort

Webseiten können in die Kategorien Informationsbereitstellung und Geschäftsbetrieb unterteilt werden Nachrichten, Aktienkurse und andere Websites. Geschäftsabläufe wie Online-Business-Halle, OA und so weiter. Natürlich gibt es viele Websites, die beide Eigenschaften gleichzeitig haben, wie z. B. Weibo, Douban und Taobao, die nicht nur Informationen bereitstellen, sondern auch bestimmte Geschäfte umsetzen.

Gewöhnliche Internetzugangsmethoden sind im Allgemeinen manuelle Vorgänge (dies erfordert keine Erklärung: D). Aber manchmal reichen manuelle Vorgänge möglicherweise nicht aus, z. B. das Crawlen großer Datenmengen im Internet, das Überwachen von Änderungen auf einer Seite in Echtzeit, Batch-Vorgänge (z. B. Batch-Posting auf Weibo, Batch-Taobao-Einkäufe), Brushing-Bestellungen usw. Aufgrund der großen Anzahl an Vorgängen und sich wiederholenden Vorgängen sind manuelle Vorgänge ineffizient und fehleranfällig. Zu diesem Zeitpunkt können Sie Software für den automatischen Betrieb verwenden.

Ich habe viele solcher Software entwickelt, darunter Webcrawler und automatische Batch-Betriebsunternehmen. Eine der Kernfunktionen besteht darin, HTTP-Anfragen zu simulieren. Natürlich wird manchmal das HTTPS-Protokoll verwendet, und im Allgemeinen muss die Website angemeldet sein, bevor weitere Vorgänge ausgeführt werden können. Der wichtigste Punkt besteht darin, den Geschäftsprozess der Website zu verstehen, dh zu wissen, wann und wie eine Übermittlung erfolgt Auf welche Seite muss eine bestimmte Operation ausgeführt werden? Um die Daten zu extrahieren oder die Ergebnisse der Operation zu erfahren, müssen Sie auch den HTML-Code analysieren. In diesem Artikel werden sie einzeln erläutert.

Dieser Artikel verwendet die C#-Sprache, um den Code anzuzeigen. Natürlich kann er auch in anderen Sprachen implementiert werden. Nehmen Sie als Beispiel die Anmeldung bei JD.com.

Simulieren von HTTP-Anfragen

C#-Simulation von HTTP-Anfragen erfordert die Verwendung der folgenden Klassen:

•WebRequest

•HttpWebRequest

•HttpWebResponse

•Stream

Erstellen Sie zuerst ein Anforderungsobjekt (HttpWebRequest), legen Sie die relevanten Header-Informationen fest und senden Sie dann die Anforderung (wenn es sich um POST handelt, schreiben Sie auch Wenn die Zieladresse zugänglich ist, wird ein Antwortobjekt (HttpWebResponse) abgerufen und das Rückgabeergebnis kann aus dem Netzwerkstream des entsprechenden Objekts gelesen werden.

Der Beispielcode lautet wie folgt:

String contentType = "application/x-www-form-urlencoded";
String accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight,
 application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap,
  application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36";

public String Get(String url, String encode = DEFAULT_ENCODE)
{
   HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
   InitHttpWebRequestHeaders(request);
   request.Method = "GET";
   var html = ReadHtml(request, encode);
   return html;
}

public String Post(String url, String param, String encode = DEFAULT_ENCODE)
{
   Encoding encoding = System.Text.Encoding.UTF8;
   byte[] data = encoding.GetBytes(param);
   HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
   InitHttpWebRequestHeaders(request);
   request.Method = "POST";
   request.ContentLength = data.Length;
   var outstream = request.GetRequestStream();
   outstream.Write(data, 0, data.Length);
   var html = ReadHtml(request, encode);
   return html;
}

private void InitHttpWebRequestHeaders(HttpWebRequest request)
{
  request.ContentType = contentType;
  request.Accept = accept;
  request.UserAgent = userAgent;
}

private String ReadHtml(HttpWebRequest request, String encode)
{
  HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  Stream stream = response.GetResponseStream();
  StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(encode));
  String content = reader.ReadToEnd();
  reader.Close();
  stream.Close();
  return content;
}

Es ist ersichtlich, dass die meisten Codes der Get- und Post-Methoden so sind ähnlich, die Codes sind also ähnlich. Encapsulation extrahiert denselben Code wie eine neue Funktion.

HTTPS-Anfrage

Wenn die Website das https-Protokoll verwendet, kann im obigen Code der folgende Fehler auftreten:


The underlying connection was closed: Could not establish trust relationship for

Der Grund ist ein Zertifikatsfehler. Beim Öffnen mit einem Browser erscheint die folgende Seite:

Methode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren

Wenn Sie auf klicken Weiter zu xxx.xx (unsicher), Sie können die Webseite weiterhin öffnen. Im Programm müssen Sie diesen Schritt nur simulieren, um fortzufahren. In C# müssen Sie nur den ServicePointManager.ServerCertificateValidationCallback-Proxy festlegen und true direkt in der Proxy-Methode zurückgeben.


private HttpWebRequest CreateHttpWebRequest(String url)
{
  HttpWebRequest request;
  if (IsHttpsProtocol(url))
  {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
  }
  else
  {
    request = WebRequest.Create(url) as HttpWebRequest;
  }

  return request;
}

private HttpWebRequest CreateHttpWebRequest(String url)
{
  HttpWebRequest request;
  if (IsHttpsProtocol(url))
  {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
  }
  else
  {
    request = WebRequest.Create(url) as HttpWebRequest;
  }

  return request;
}

Auf diese Weise können Sie normal auf https-Websites zugreifen.

Cookies zur Identitätsauthentifizierung aufzeichnen

Einige Websites erfordern eine Anmeldung, um den nächsten Schritt auszuführen, wie zum Beispiel beim Einkaufen auf JD.com, wo Sie sich zuerst anmelden müssen. Der Website-Server verwendet Sitzungen, um Client-Benutzer aufzuzeichnen. Jede Sitzung entspricht einem Benutzer, und der vorherige Code stellt bei jeder Erstellung einer Anfrage eine Sitzung wieder her. Auch wenn die Anmeldung erfolgreich ist, ist die Anmeldung ungültig, da im nächsten Schritt eine neue Verbindung erstellt wird. Zu diesem Zeitpunkt müssen Sie einen Weg finden, den Server glauben zu lassen, dass diese Reihe von Anforderungen aus derselben Sitzung stammen.

Der Client verfügt nur über Cookies. Um dem Server bei der nächsten Anfrage mitzuteilen, welcher Sitzung der Client entspricht, wird in den Cookies eine Aufzeichnung der Sitzungs-ID gespeichert. Solange die Cookies identisch sind, handelt es sich also um denselben Benutzer auf dem Server.

Zu diesem Zeitpunkt müssen Sie CookieContainer verwenden. Wie der Name schon sagt, handelt es sich hierbei um einen Cookies-Container. HttpWebRequest verfügt über eine CookieContainer-Eigenschaft. Solange die Cookies für jede Anfrage in CookieContainer aufgezeichnet sind, wird das CookieContainer-Attribut von HttpWebRequest bei der nächsten Anfrage gesetzt. Da die Cookies dieselben sind, handelt es sich um denselben Benutzer auf dem Server.


public String Get(String url, String encode = DEFAULT_ENCODE)
{
   HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
   InitHttpWebRequestHeaders(request);
   request.Method = "GET";

   request.CookieContainer = cookieContainer;
   HttpWebResponse response = request.GetResponse() as HttpWebResponse;
   foreach (Cookie c in response.Cookies)
   {
      cookieContainer.Add(c);
   }
}

Analysieren und debuggen Sie die Website

Das oben Genannte führt natürlich zu simulierten HTTP-Anfragen Am Ende kommt es auf die Analysestation an. Die allgemeine Situation ist, dass es keine Dokumentation gibt, kein Website-Entwickler gefunden werden kann und die Erkundung von einer Black Box aus beginnt. Es gibt viele Analysetools. Es wird empfohlen, das Chrome+-Plug-in Advanced Rest Client zu verwenden, mit dem wir wissen können, welche Vorgänge und Anforderungen beim Öffnen einer Webseite ausgeführt werden.

Beim Anmelden bei JD.com werden beispielsweise folgende Daten übermittelt:

Methode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren

Wir können auch sehen, dass das Passwort von Jingdong tatsächlich im Klartext übertragen wird, was hinsichtlich der Sicherheit sehr besorgniserregend ist!

Sie können auch die zurückgegebenen Daten sehen:

Methode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren

Die zurückgegebenen Daten sind JSON-Daten, aber u8d26 was sind das? Tatsächlich handelt es sich hierbei um eine Unicode-Kodierung. Sie können sie mit dem Konvertierungstool für die Unicode-Kodierung in lesbaren Text umwandeln. Das zurückgegebene Ergebnis lautet beispielsweise: Der Kontoname und das Kennwort stimmen nicht überein. Geben Sie sie erneut ein.

HTML analysieren

Die per HTTP-Anfrage erhaltenen Daten liegen im Allgemeinen im HTML-Format vor und können manchmal Json oder XML sein. Um nützliche Daten zu extrahieren, ist eine Analyse erforderlich. Die Komponenten, die HTML analysieren, sind:

•HTML-Parser. Verfügbar auf mehreren Plattformen wie Java/C#/Python. Habe es schon lange nicht mehr benutzt.

•HtmlAgilityPack. Durch Parsen von HTML über XPath. Ständig genutzt. Informationen zu XPath-Tutorials finden Sie in den XPath-Tutorials von W3School.

Fazit

In diesem Artikel werden die Fähigkeiten vorgestellt, die zum Entwickeln simulierter automatischer Webseitenvorgänge erforderlich sind, von der Simulation von HTTP/HTTPS-Anfragen bis hin zu Cookies Websites analysieren, HTML analysieren. Der Code dient der Veranschaulichung der Verwendung, ist kein vollständiger Code und kann möglicherweise nicht direkt ausgeführt werden.

Das obige ist der detaillierte Inhalt vonMethode zur Simulation von HTTP-Anfragen, um den automatischen Betrieb von Webseiten und die Datenerfassung zu realisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn