import socks,socket,urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
temp = socket.socket
socket.socket = socks.socksocket
print urllib2.urlopen('http://www.google.com').read() // Proxy
socket.socket=temp
print urllib2.urlopen('http://www.google.com').read() // No proxy
在每次数据传输前客户端要和服务器建立TCP连接,为节省传输消耗,默认为keep-alive,即连接一次,传输多次,然而在多次访问后不能结束并回到连接池中,导致不能产生新的连接
headers中的Connection默认为keep-alive,
将header中的Connection一项置为close
headers={"Connection":"close"}
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
如此设置的代理代表为一个python通道设置了默认代理,基本代表全局了;
但如此设置会影响未使用代理的请求。
因此改进如下:
在requests的请求中添加代理:
session=requests.Session()
session.prixes={"http":"http://127.0.0.1:1080","https":"http://127.0.0.1:1080"}
session.get()
在paramiko中添加代理:
sock=socks.socksocket()
sock.set_proxy(socks.SOCKS5, "127.0.0.1", 1080)
sock.connect((hostname,int(port)))
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
client.connect(hostname=hostname,port=int(port),username=username,pkey=pkey,sock=sock)
网友评论