Ce proxy a folosit acel transfer PHP multi-cURL?
Păstrați metadatele proxy lângă fiecare handle cURL și distingeți ruta configurată de un IP de ieșire observat de destinație.
Transferurile multi-cURL se termină în propria ordine. Dacă ați atribuit un proxy diferit fiecărui handle, primul rezultat finalizat nu aparține neapărat primului proxy din lista de intrare.
Atașați un identificator de transfer stabil în timp ce configurați fiecare handle. Dacă testați puncte finale publice selectabile, lista de proxy HTTP oferă candidați HTTP. PHP expune mecanismul de date private al libcurl:
$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);
Când curl_multi_info_read() raportează un transfer finalizat, folosiți handle-ul returnat pentru a recupera identificatorul:
$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);
Păstrați o înregistrare de aplicație cheiată cu acel identificator, care conține destinația, proxy-ul configurat și numărul încercării. O reîncercare prin alt proxy merită o înregistrare nouă de încercare, chiar dacă aparține aceluiași job general.
Țineți separate trei tipuri de adrese
Punctul final al proxy-ului configurat este adresa transmisă către cURL. Adresa peer a unei conexiuni descrie conexiunea de rețea deschisă de cURL. Un IP de ieșire observat de destinație este informație raportată de cealaltă parte. Pot diferi, mai ales cu proxy-uri înlănțuite sau administrate de furnizor.
Metadatele private înregistrează configurația dorită; nu pot dovedi ce IP a observat destinația. Invers, răspunsul IP al unei destinații nu vă spune automat ce handle din programul dvs. l-a produs.
Stocați un identificator de proxy sigur în jurnalele de rutină. Dacă punctul final complet conține credențiale, înregistrarea acelui URL pentru fiecare transfer eșuat răspândește parola în toată colecția dvs. de erori.
Acest mic pas de contabilitate face rezultatele mixte mai ușor de citit: un job, o încercare, un proxy selectat și un rezultat real. De asemenea, evită dependența de reprezentări accidentale ale handle-ului care s-au schimbat între API-urile cURL PHP bazate pe resurse și pe obiecte.