Anforderungen: Jeden Tag werden beim Öffnen von Webseiten oder Apps die Informationen, die Sie durchsuchen, fast immer durch das Senden von HTTP- oder HTTPS-Anfragen abgerufen. Verwendung von C# basierend auf dem Hypertext Transfer Protocol und nativen Sockets, um HTTP-Anfragen zu senden.
Vereinbarung
Das Hypertext Transfer Protocol (HTTP) ist ein zustandsloses Anwendungsschicht-Protokoll, das für verteilte, kollaborative Hypertext-Informationssysteme verwendet wird.
HTTP / 1.1-Protokoll (RFC 9112):Der Hyperlink-Login ist sichtbar. HTTP-Semantik (RFC 9110):Der Hyperlink-Login ist sichtbar.
Beispielwunsch:
Beispielantwort:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Hallo Welt! Mein Inhalt enthält eine nachlaufende CRLF.
Socket sendet Anfragen
Der Quellcode ist wie folgt:
Der Quellcode unterstützt das Senden von Anfragen an HTTP- und HTTPS-Protokolle. Wie unten gezeigt:
Verbindung: nah vs. am Leben halten
Wenn du ReadToEndAsync verwendest, um alle Daten aus der Antwort zu lesen, musst du die Verbindung auf Schließen setzen. Wenn du sie auf Keep-alive stellst, friert die ReadToEndAsync-Antwort ein. Gründe für das Nichteinfrieren: Viele Webserver (wie Nginx, Apache oder bestimmte API-Gateways) initiieren aktiv ein FIN-Paket, um die TCP-Verbindung zu schließen, wenn der Client nativ ist, um einen Socket ohne weitere Aktion zu schreiben, oder wenn der Server eine Idle-Timeout auslöst (üblicherweise auf 5 Sekunden gesetzt).
HTTP-Pipeline, bei der mehrere Anfragen gleichzeitig gesendet werden:Der Hyperlink-Login ist sichtbar.
Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。
FDD8 ist eine solche hexadezimale Zahl, die die Größe des folgenden Datenblocks (in Bytes) angibt. Die Umrechnung von fdd8 von hexadezimal auf dezimal ergibt 65.016 Bytes. Das bedeutet, dass unmittelbar nach fdd8 und CRLF 65.016 Bytes Daten vorhanden sind. Danach können weitere Datenblöcke auftreten, bis ein Block der Größe 0 gefunden wird, was die Übertragung als abgeschlossen anzeigt.
FDD8 teilt dem Empfänger mit, dass der nächste Datenblock 65.016 Bytes lang ist. |