Którego proxy użyło to przekazanie PHP multi-cURL?
Zachowuj metadane proxy przy każdym handle cURL i odróżniaj skonfigurowaną trasę od wychodzącego IP widzianego przez cel.
Przekazania multi-cURL kończą się w swojej własnej kolejności. Jeśli przypisałeś każdemu handle inny proxy, pierwszy ukończony wynik niekoniecznie należy do pierwszego proxy na Twojej liście wejściowej.
Dołącz stabilny identyfikator przekazania podczas konfigurowania każdego handle. Jeśli testujesz wybieralne publiczne punkty końcowe, lista proxy HTTP dostarcza kandydatów HTTP. PHP udostępnia mechanizm danych prywatnych libcurl:
$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);
Gdy curl_multi_info_read() zgłasza ukończone przekazanie, użyj zwróconego handle, aby odzyskać identyfikator:
$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);
Prowadź rekord aplikacji kluczowany tym identyfikatorem, zawierający cel, skonfigurowany proxy i numer próby. Ponowna próba przez inny proxy zasługuje na nowy rekord próby, nawet jeśli należy do tego samego zadania ogólnego.
Trzymaj trzy rodzaje adresów osobno
Skonfigurowany punkt końcowy proxy to adres przekazywany do cURL. Adres peera połączenia opisuje połączenie sieciowe otwarte przez cURL. Wychodzące IP widziane przez cel to informacja zgłaszana z drugiej strony. Mogą się różnić, zwłaszcza przy proxy łańcuchowych lub zarządzanych przez dostawcę.
Prywatne metadane zapisują zamierzoną konfigurację; nie mogą dowieść, jakie IP widział cel. Odwrotnie, odpowiedź IP celu nie mówi automatycznie, który handle w Twoim programie ją wytworzył.
Przechowuj bezpieczny identyfikator proxy w rutynowych logach. Jeśli pełny punkt końcowy zawiera dane uwierzytelniające, logowanie tego URL przy każdej nieudanej próbie rozprzestrzenia hasło w całej kolekcji błędów.
Ten mały krok księgowy ułatwia czytanie mieszanych wyników: jedno zadanie, jedna próba, jeden wybrany proxy i jeden rzeczywisty wynik. Pozwala też uniknąć polegania na przypadkowych reprezentacjach handle, które zmieniły się między API cURL PHP opartymi na zasobach i na obiektach.