------ ACTUALIZADA 04 de marzo de 2017 -------
que he estado allí y se encontró que la mejor solución era:
Si no tiene un servidor dedicado o al menos un vps y un poco de paciencia no se molestan en leer el resto de la publicación ...
1 - Instalar Squid 3.2 desde la fuente (ver notas a continuación)
2 - Agregue una lista de aproximadamente 20 ip a squid.conf (cuesta aproximadamente 25 $ mes)
3 - Use la nueva característica ACLrandom para rotar la IP saliente.
De esta manera no es necesario rotar la lista de los IP en su script PHP, en cambio, se le conecta a la misma ip (por ejemplo: 192.168.1.1:3129) pero el visibles IP saliente (tcp_outgoing_address
) girará en cada solicitud en función de la configuración aleatoria.
Deberá compilar squid 3.2 con '-enable-http-violations'
para convertirlo en un proxy anónimo de élite.
Instalación paso a paso:
yum -y groupinstall 'Development Tools'
yum -y install openssl-devel
mkdir /meus
cd /meus
wget http://www.squid-cache.org/Versions/v3/3.2/squid-3.2.13.tar.gz
tar -xvf squid-3.2.13.tar.gz
cd squid-3.2.13
./configure -prefix=/squid32 '--enable-removal-policies=heap,lru' '--enable-ssl' '--with-openssl' '--enable-linux-netfilter' '--with-pthreads' '--enable-ntlm-auth-helpers=SMB,fakeauth' '--enable-external-acl-helpers=ip_user,ldap_group,unix_group,wbinfo_group' '--enable-auth-basic' '--enable-auth-digest' '--enable-auth-negotiate' '--enable-auth-ntlm' '--with-winbind-auth-challenge' '--enable-useragent-log' '--enable-referer-log' '--disable-dependency-tracking' '--enable-cachemgr-hostname=localhost' '--enable-underscores' '--enable-build-info' '--enable-cache-digests' '--enable-ident-lookups' '--enable-follow-x-forwarded-for' '--enable-wccpv2' '--enable-fd-config' '--with-maxfd=16384' '-enable-http-violations'
make
make install
squid.conf de muestra (que se encuentra en este caso /squid32/etc/squid.conf):
#this will be the ip and port where squid will run
http_port 5.5.5.5:33333 # change this ip and port ...
#Extra parameters on squid.conf to make an elite proxy
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all
via off
forwarded_for off
follow_x_forwarded_for deny all
acl vinte1 random 1/5
acl vinte2 random 1/5
acl vinte3 random 1/5
acl vinte4 random 1/5
acl vinte5 random 1/5
tcp_outgoing_address 1.1.1.1 vinte1 # fake ip's , replace with yours
tcp_outgoing_address 1.1.1.2 vinte2
tcp_outgoing_address 1.1.1.3 vinte3
tcp_outgoing_address 1.1.1.4 vinte4
tcp_outgoing_address 1.1.1.5 vinte5
tcp_outgoing_address 1.1.1.6 # this will be the default tcp outgoing address
Muestra PHP CURL solicitud usando un proxy squid:
$proxy = "1.1.1.1:33333";
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
$url = "https://api.ipify.org/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,15);
curl_setopt($ch, CURLOPT_HTTP_VERSION,'CURL_HTTP_VERSION_1_1');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD,'USER:PASS');
curl_setopt($ch, CURLOPT_USERAGENT,$useragent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result
Enlaces Utiles:
Calamar 3.2 Fuente: http://www.squid-cache.org/Versions/v3/3.2/squid-3.2.13.tar.gz
Rotating_three_IPs: http://wiki.squid-cache.org/ConfigExamples/Strange/RotatingIPs#Example:_Rotating_three_IPs_based_on_time_of_day
AclRandom: http://wiki.squid-cache.org/Features/AclRandom
Instalación de calamar 3.2 en CentOS 5.3 - http://www.guldmyr.com/blog/installing-squid-3-2-on-centos-5-3/
Añadir contraseña a Calamar: How to set up a squid Proxy with basic username and password authentication?
He encontrado que esta es la forma más confiable y segura de rotar proxies porque no confía en proveedores de proxy externos y su información (contraseñas, datos, etc.) será más segura. Puede sonar un poco difícil de configurar al principio, pero valdrá la pena cada segundo que haya gastado, GL :)
Recuerdo haber intentado hacer algo como esto para un cliente.El mayor problema fue obtener una lista constante de proxies para usar. Originalmente estábamos sacando la lista de un sitio, pero el problema era que podían cambiar las cosas y el script simplemente dejaba de funcionar. – xil3
Visite [este enlace] (http://scraperblog.blogspot.com/2013/07/php-scrape-website-with-rotating-proxies.html) para obtener una solución adecuada. – pguardiario