Welchen Proxy nutzte dieser PHP-Multi-cURL-Transfer?
Behalten Sie Proxy-Metadaten bei jedem cURL-Handle und unterscheiden Sie die konfigurierte Route von einer zielseitig beobachteten Exit-IP.
Multi-cURL-Transfers enden in ihrer eigenen Reihenfolge. Wenn Sie jedem Handle einen anderen Proxy zugewiesen haben, gehört das zuerst abgeschlossene Ergebnis nicht zwangsläufig zum ersten Proxy Ihrer Eingabeliste.
Hängen Sie beim Konfigurieren jedes Handles eine stabile Transferkennung an. Wenn Sie auswählbare öffentliche Endpunkte testen, liefert die HTTP-Proxy-Liste HTTP-Kandidaten. PHP stellt den Private-Data-Mechanismus von libcurl bereit:
$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);
Wenn curl_multi_info_read() einen abgeschlossenen Transfer meldet, verwenden Sie das zurückgegebene Handle, um die Kennung wiederzugewinnen:
$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);
Führen Sie einen Anwendungsdatensatz, der mit dieser Kennung verschlüsselt ist und Ziel, konfigurierten Proxy und Versuchsnummer enthält. Ein erneuter Versuch über einen anderen Proxy verdient einen neuen Versuchsdatensatz, auch wenn er zum selben übergeordneten Auftrag gehört.
Halten Sie drei Arten von Adressen getrennt
Der konfigurierte Proxy-Endpunkt ist die Adresse, die cURL übergeben wird. Die Peer-Adresse einer Verbindung beschreibt die Netzwerkverbindung, die cURL geöffnet hat. Eine zielseitig beobachtete Exit-IP ist eine Information, die von der Gegenseite gemeldet wird. Sie können sich unterscheiden, besonders bei verketteten oder anbieterverwalteten Proxys.
Private Metadaten dokumentieren Ihre beabsichtigte Konfiguration; sie können nicht beweisen, welche IP das Ziel beobachtet hat. Umgekehrt sagt eine IP-Antwort des Ziels nicht automatisch, welches Handle in Ihrem Programm sie erzeugt hat.
Speichern Sie eine sichere Proxy-Kennung in Routineprotokollen. Wenn der vollständige Endpunkt Anmeldedaten enthält, verteilt das Protokollieren dieser URL bei jedem fehlgeschlagenen Transfer das Passwort über Ihre gesamte Fehlersammlung.
Dieser kleine Buchhaltungsschritt macht gemischte Ergebnisse leichter lesbar: ein Auftrag, ein Versuch, ein ausgewählter Proxy und ein tatsächliches Ergebnis. Er vermeidet es auch, sich auf beiläufige Handle-Darstellungen zu verlassen, die sich zwischen ressourcenbasierten und objektbasierten cURL-APIs von PHP geändert haben.