Como posso usar um proxy 4/5 de meias com urllib2?
Pergunta
Como posso usar um proxy de meias 4/5 com urllib2 para baixar uma página da web?
Solução
Você pode usar Socksipy módulo. Basta copiar o arquivo "Socks.py" para o diretório Lib/Site-Packages do seu Python, e você está pronto para ir.
Você deve usar meias antes do urllib2. (Tente pip install PySocks
)
Por exemplo:
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
socket.socket = socks.socksocket
import urllib2
print urllib2.urlopen('http://www.google.com').read()
Você também pode experimentar Pycurl Lib e Tsocks, para obter mais detalhes, clique em aqui.
Outras dicas
Adicionando uma alternativa à resposta de Pan quando você precisa usar muitos proxies diferentes ao mesmo tempo.
Nesse caso, você precisa criar um abridor como faz com um proxy HTTP. Há um código disponível no github https://gist.github.com/869791
opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS4, 'localhost', 9999))
print opener.open('http://www.whatismyip.com/automation/n09230945.asp').read()
Como as meias são um proxy de nível de soquete, você deve substituir o objeto de soquete usado por urllib2
. Por favor, dê uma olhada um isto solução. Se o patch de macaco não for bom o suficiente para você, você pode tentar subclasse ou copiar modificar o código do urllib2
Biblioteca padrão.