Multi-cURL-överföringar slutförs i sin egen ordning. Om du tilldelade varje handtag en annan proxy tillhör det första slutförda resultatet inte nödvändigtvis den första proxyn i din indatalista.

Bifoga en stabil överföringsidentifierare när du konfigurerar varje handtag. Om du testar valbara offentliga slutpunkter levererar HTTP-proxylistan HTTP-kandidater. PHP exponerar libcurls mekanism för privata data:

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

När curl_multi_info_read() rapporterar en slutförd överföring använder du handtaget som returneras för att återställa identifieraren:

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

Håll en applikationspost nycklad av den identifieraren som innehåller destinationen, den konfigurerade proxyn och försöksnumret. Ett nytt försök via en annan proxy förtjänar en ny försökspost, även om det hör till samma övergripande jobb.

Håll tre typer av adresser åtskilda

Den konfigurerade proxy-slutpunkten är adressen som ges till cURL. En anslutnings peer-adress beskriver nätverksanslutningen som cURL öppnade. En utgående IP som destinationen ser är information som rapporteras från andra sidan. De kan skilja sig, särskilt med kedjade eller leverantörsstyrda proxys.

Privata metadata registrerar din avsedda konfiguration; de kan inte bevisa vilken IP destinationen såg. Omvänt berättar inte en destinations IP-svar automatiskt vilket handtag i ditt program som producerade det.

Lagra en säker proxy-identifierare i rutinloggar. Om den fullständiga slutpunkten innehåller autentiseringsuppgifter sprider loggning av den URL:en vid varje misslyckad överföring lösenordet i hela din felsamling.

Detta lilla bokföringssteg gör blandade resultat lättare att läsa: ett jobb, ett försök, en vald proxy och ett faktiskt resultat. Det undviker också att förlita sig på tillfälliga handtagsrepresentationer som ändrades mellan PHPs resursbaserade och objektbaserade cURL-API:er.

Relaterade artiklar