PHP-cURL-Proxy-Header: CONNECT gegenüber Zielantworten
Halten Sie CONNECT-, Authentifizierungs-, Weiterleitungs- und finale Antwort-Header getrennt, wenn eine PHP-cURL-Übertragung einen Proxy nutzt.
Sammeln Sie Headerzeilen getrennt vom Antwortkörper. Eine Übertragung über einen Proxy kann CONNECT-, Authentifizierungs-, Weiterleitungs- und Zielantwort-Header in einem Vorgang liefern:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Dieser Callback behält die rohe Zeilenfolge bei und gibt die Anzahl der akzeptierten Bytes zurück. Er empfängt vollständige Zeilen; er gruppiert sie jedoch noch nicht in Antworten und wählt auch nicht die Header der endgültigen Website aus.
Die Folge als Blöcke interpretieren
Eine HTTP-Statuszeile beginnt einen Antwortblock, und eine Leerzeile beendet dessen Header. Behalten Sie diese Grenzen bei, bevor Sie die endgültige Zielantwort wählen. Zwischengeschaltete Authentifizierungsversuche und Weiterleitungen können jeweils Blöcke hinzufügen.
Trailer können später über den Callback eintreffen. Halten Sie genügend Parser-Zustand vor, um sie von den anfänglichen Headern zu unterscheiden, statt jedes spätere Feld an die erste Antwort zu hängen.
Den Tunnel-Nachweis behalten oder unterdrücken
Lesen Sie CURLINFO_HTTP_CONNECTCODE separat für den CONNECT-Status des HTTPS-Tunnels. Ein akzeptierter Tunnel belegt keine erfolgreiche Website-Antwort.
Wenn CONNECT-Header für den Sammler nicht nötig sind, steuert CURLOPT_SUPPRESS_CONNECT_HEADERS ihre Auslieferung an die konfigurierte Header-Ausgabe und die Callback-Pfade. Prüfen Sie die Unterstützung in der eingebundenen libcurl und im PHP-Build. Unterdrückung vereinfacht die Erfassung, entfernt aber Tunnel-Nachweise auf Header-Ebene, die bei der Diagnose helfen können.
Rekonstruieren Sie den Körper nicht über einen festen Offset oder durch Suchen nach einem HTML-Tag. Headergrößen variieren, Zwischenantworten unterscheiden sich, und der Körper kann binär oder leer sein. Ein alter versionsspezifischer Fehlerbericht rechtfertigt keinen geratenen Offset.
Halten Sie die Körperbehandlung getrennt und bewahren Sie den Übertragungsfehler zusammen mit den beobachteten Antwortphasen auf, wenn Erfassung oder Analyse fehlschlägt. Das unterscheidet einen abgebrochenen Callback, fehlerhafte Anwendungsdaten und einen abgelehnten Proxy-Austausch.