Přenosy multi-cURL končí ve vlastním pořadí. Pokud jste každému handle přiřadili jiný proxy, první dokončený výsledek nemusí patřit prvnímu proxy ve vašem vstupním seznamu.

Při konfiguraci každého handle připojte stabilní identifikátor přenosu. Pokud testujete volitelné veřejné koncové body, seznam HTTP proxy poskytuje HTTP kandidáty. PHP zpřístupňuje mechanismus soukromých dat libcurl:

$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);

Když curl_multi_info_read() ohlásí dokončený přenos, použijte vrácený handle k obnovení identifikátoru:

$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);

Veďte záznam aplikace klíčovaný tímto identifikátorem obsahující cíl, nakonfigurovaný proxy a číslo pokusu. Opakovaný pokus přes jiný proxy si zaslouží nový záznam pokusu, i když patří ke stejné celkové úloze.

Držte tři druhy adres odděleně

Nakonfigurovaný koncový bod proxy je adresa předaná cURL. Adresa protějšku spojení popisuje síťové spojení, které cURL otevřel. Výstupní IP pozorovaná cílem je informace hlášená z druhé strany. Mohou se lišit, zejména u řetězěných proxy nebo proxy spravovaných poskytovatelem.

Soukromá metadata zaznamenávají zamýšlenou konfiguraci; nemohou dokázat, jakou IP cíl pozoroval. Naopak IP odpověď cíle vám automaticky neřekne, který handle ve vašem programu ji vytvořil.

Ukládejte bezpečný identifikátor proxy do běžných logů. Pokud plný koncový bod obsahuje přihlašovací údaje, logování této URL pro každý neúspěšný přenos rozšíří heslo po celé vaší sbírce chyb.

Tento malý účetní krok usnadňuje čtení smíšených výsledků: jeden úkol, jeden pokus, jeden vybraný proxy a jeden skutečný výsledek. Také se vyhýbá spoléhání na náhodné reprezentace handle, které se změnily mezi cURL API PHP založenými na prostředcích a na objektech.

Související články