
Python y cURL: una forma alternativa de jugar con IPs proxy
Hermanos oruga debe haber encontrado mecanismo anti-escalada, ¿verdad? El tipo de datos delante de los ojos, pero no puede obtener el sabor, como la olla caliente delante de los palillos no dan. Esta vez el proxy IP es su "palillos", especialmente con cURL esta vieja herramienta, se puede jugar un montón de nuevos trucos.
¿Por qué cURL Binding Library?
Mucha gente piensa que la biblioteca de peticiones es suficiente, pero cuando se trata de la necesidad de un control fino del escenario de peticiones (como establecer un protocolo de transporte específico), el control subyacente de cURL viene muy bien. Tomemos una castaña:
importar pycurl
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
La clave está en esta línea ↓↓↓
c.setopt(c.PROXY, 'http://username:password@proxy.ipipgo.com:8080')
c.perform()
c.close()
vigilar cuidadosamentenombre de usuario:contraseña@dirección del proxyEste formato, muchos novatos plantados en esto, ipipgo autenticación proxy debe ser llenado en estricta conformidad con este formato.
Soluciones prácticas para pools de proxy dinámicos
Una sola IP es fácil de bloquear, necesitamos obtener un pool de IPs. Usa la API de ipipgo para obtener IPs, junto con cURL'sCURLOPT_PROXYOpciones que se pueden jugar así:
def get_ip().
Aquí llamamos a la API ipipgo
return requests.get('https://api.ipipgo.com/getip?type=json').json()['proxy']
def curl_with_rotation(url):: for _ in range(3): falla 3 veces.
for _ in range(3): falla al reintentar 3 veces
prueba.
proxy = get_ip()
c = pycurl.
c.setopt(c.PROXY, proxy)
Otras configuraciones...
return True
except pycurl.error as e.
print(f "IP {proxy} colgada, pasar a la siguiente")
return False
Guía para evitar escollos (versión tabular)
| bache | sintomático | prescripción |
|---|---|---|
| Error de formato de autenticación | Devolución 407 error | Comprueba si la contraseña de la cuenta del backend ipipgo contiene caracteres especiales. |
| Tiempo de espera de la conexión | CURLE_OPERATION_TIMEOUT | Establezca CONNECTTIMEOUT antes que el parámetro pycurl.TIMEOUT |
| Fallo de autenticación SSL | Error de certificado SSL | set c.setopt(pycurl.SSL_VERIFYPEER, 0) |
Tiempo de control de calidad
P: ¿Qué debo hacer si la IP de mi proxy no suele ser válida?
R: Se recomienda utilizar el paquete de pago por volumen de ipipgo, su tasa de supervivencia puede llegar hasta 98% o más, mucho más estable que la IP gratuita.
P: ¿Cómo configuro un proxy de alto anonimato si lo necesito?
R: Seleccione el tipo "Proxy de Privacidad" en el backend de ipipgo, no se necesita ninguna configuración extra en el código, su salida borrará automáticamente la cabecera X-Forwarded-For.
P: ¿Por qué fluctúa la velocidad de respuesta?
A:检查是否混用了不同地域的代理,建议在ipipgo控制台创建同区域的代理组,避免跨机房。
Trucos fríos del oficio
1. Herramienta de depuración: configuraciónc.setopt(c.VERBOSE, True)La información completa de la cabecera de la solicitud puede consultarse en la página
2. Multiplexación de la conexión: configuraciónc.setopt(c.FORBID_REUSE, False)Puede aumentar el rendimiento de 201TP en aproximadamente 3T
3. Tiempo de espera preciso: establece diferentes tiempos de espera para distintas operaciones
c.setopt(c.CONNECTTIMEOUT, 5) Tiempo de espera de la conexión
c.setopt(c.TIMEOUT, 15) tiempo de espera total
Por último, me gustaría decir unas palabras sobre las IP proxy: la estabilidad es más importante que cualquier otra cosa. El coste de tu propio tiempo dedicado a tirar proxies gratuitos es suficiente para comprar un servicio profesional durante años. La talla de ipipgo es capaz de proporcionar laExtracción de API en tiempo real+análisis forense automáticoEl servicio es la forma adecuada de abrir nuestros programadores.

