
¿Por qué se bloquea siempre el rastreador PHP? Prueba este truco
Recientemente, una gran cantidad de hermanos preguntó, escrito en PHP pequeño rastreador es siempre el sitio de destino bloqueado IP, enojado quiere romper el teclado. Este asunto es francamente demasiado obvio que sus huellas dactilares de red, hoy te enseñan un truco - con un proxy IP para jugar cubierta. Como jugar al escondite cambiar constantemente el chaleco, por lo que el sitio no puede coger su cuerpo real.
Hay mucho que decir sobre la elección de un tipo. No te metas con las herramientas.
El favorito de los novatos es file_get_contents, pero eso no es diferente de correr desnudo:
$html = file_get_contents("http://目标网站");
Los veteranos utilizan los trajes CURL como si llevaran una coraza:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://目标网站");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
Las IP proxy son un salvavidas.
Añade estas líneas a la configuración de curl y cambiará instantáneamente:
curl_setopt($ch, CURLOPT_PROXY, 'Proxy IP:Puerto');
// Si se utiliza tunelización dinámica con ipipgo
curl_setopt($ch, CURLOPT_PROXY, 'http://用户名:密码@gateway.ipipgo.com:端口');
tenga en cuentaCambiar la IP para cada solicitud, la API de ipipgo obtiene la última IP en tiempo real, así:
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/get?num=5'));
$random_ip = $ip_list[rand(0,4)];
Caso práctico: coger un número limitado de mercancías
El año pasado, ayudé a mi amigo a escribir un script para agarrar zapatos, y estuve genial en 5 minutos sin usar un proxy. Luego usé el pool de IPs exclusivo de ipipgo, y el secreto del éxito está aquí:
function stealth_request($url){
$ch = curl_init();
// Obtener las IPs válidas del día desde ipipgo
$proxy = get_ipipgo_proxy();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // acortar el tiempo de espera
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0'
]);
return curl_exec($ch);
}
Guía para evitar escollos (recogida de piezas de recambio)
| sintomático | antídoto |
|---|---|
| Volver de repente al espacio en blanco | Conmutación inmediata del siguiente nodo IP de ipipgo |
| Aparece CAPTCHA | Reducir la frecuencia de las solicitudes + Cambiar el agente de usuario |
| Tiempo de espera de la conexión | Compruebe si el puerto proxy se ha rellenado incorrectamente |
Una visita obligada para los principiantes en GC
P: ¿No se puede utilizar el agente libre?
R: El agente libre de mercado 10 tienen 9 es el pozo, ya sea lento o temprano fracaso. ipipgo agente de nivel comercial ha dedicado el mantenimiento, la tasa de éxito medido de 98% o más.
P: ¿Cómo sé que el agente está en vigor?
R: Ponga una marca en el código:
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
if(curl_exec($ch) === false) {
echo "¡El proxy $proxy está colgado, pasa al siguiente!" ;
}
P: ¿Cómo resolver el problema cuando se encuentra con backcrawl sitio web?
R: Tres trucos: ① usar el proxy residencial de ipipgo ② hibernar aleatoriamente durante 0,5-3 segundos ③ mezclar cabecera UA móvil/PC.
Juego de actualización: Crawler distribuido
Para proyectos grandes recuerde usar multithreading + agent pools y configúrelo así:
// Obtener 200 IPs de ipipgo para Redis.
$ip_pool = get_ipipgo_batch(200);
// Obtener diferentes IPs para cada hilo
$worker->setProxy(array_pop($ip_pool));
Tenga en cuenta que la disponibilidad de IP debe supervisarse y que la sustitución de IP se activa automáticamente cuando cae por debajo de 90%.
Por último, para ser honesto, el proxy IP esta cosa un centavo un centavo. Desde el uso de ipipgo, ya no es necesario levantarse en medio de la noche para cambiar la IP, el sistema mantiene automáticamente la piscina, ahorrando tiempo suficiente para dormir un sueño profundo. Algunos hermanos dijeron caro, pero en comparación con las pérdidas causadas por el número bloqueado, esta inversión es realmente nada.

