具有请求

时间:2015-06-01 06:15:39

标签: python proxy

如何使用带有请求的文本文件中的代理? 文件中的代理采用以下格式:ip:port 所以我无法真正建立像''scheme':'scheme:// ip:port'}

这样的字典

我需要使用相同的代理访问两个不同的站点,然后切换代理。其中一个站点使用HTTP,另一个站点使用HTTPS。

我尝试为HTTP请求执行此操作:

response = c.get(url, proxies = {'http': 'http://'+p})

这就是HTTPS请求:

response = c.get(url, proxies = {'https': 'https://'+p})

但是第一个不起作用并且给我一个错误。

这有什么变通方法吗?

1 个答案:

答案 0 :(得分:1)

我的假设是由于不受信任的SSL证书而失败。

  

requests.exceptions.SSLError:[Errno 1] _ssl.c:503:错误:14090086:SSL   例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

要解决此问题,请阅读以下post

但是,如果您收到任何类似的消息

  

与服务器的连接被拒绝。

可能由多种原因引起,例如防火墙阻塞端口或代理配置错误。无论如何,要查看程序中是否存在错误,请尝试在浏览器中使用代理(SSL)并上网。

关于你的第二个问题,这应该不是问题。 例如,文件proxies.txt具有以下数据:

172.17.0.3:443
172.17.0.23:9443
172.17.0.34:80

然后,您可以根据端口号推断方案。以443结尾的端口通常是HTTPS

with open('proxies.txt', 'r') as data
    lines = data.readlines()

proxies = {'http': [], 'https': []}
for line in lines:
    ip_port = line.split(':')
    ip, port = (ip_port[0], ip_port[1]) if len(ip_port) > 1 else (ip_port[0], 80)
    scheme = 'http'
    if port.endswith('443'):
        scheme = 'https'
    proxies[scheme].append(join([scheme, '://', ip, ':', port]))