python2.7用socks和socket设置代理
接下来是最近遇到的一个代理问题。
背景:一个基于python2.7的自动化测试项目
目的:因调试需求,需要通过代理连接其他公司的前端网站,来检验项目运行所在的问题。
问题:RUN>等了1分钟没有任何提示,之后抛出异常,raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='xx.xx.xx.xx', port=80): Max retries exceeded with url: /xx/xx/xxx (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000000002E7DC50>: Failed to establish a new connection: [Errno 10060] ',)
明显连接不上网址,但是网页可以连接上,那就是代理的问题了。
解决: 正常的python2.7版本设置代理的格式是这样的:
proxy_handler = urllib2.ProxyHandler({'http':'ip:port'})
opener = urllib2.build_opener(proxy_handler)
r = opener.open('http://www.baidu.com')
但是我不需要主动的去打开网页,于是了解到可以把代理安装到urllib2,之后通过urllib2打开的网页都通过这个代理连接,于是就变成了这样。
proxy_handler = urllib2.ProxyHandler({'http':'ip:port'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
到此为止,对于python2.7版本的代理设置基本上都可以满足了。
再次运行......还是连接不上,一样的异常。之后上网查找各种设置代理的问题,没有试成功过,包括设置pycharm的系统代理,也行不通。
之后我用python3.6版本做了个连接代理的测试,发现python3.6的可以成功,但是python3.6的代理设置和python2.7的代理设置不尽相同,没什么关系。
接着就去看代码内部逻辑找到连接网址的相关代码块,去看看是怎么连接的,既然咱们用urllib2设置的代理,那连接的时候应该会有相关的方法,what?,用socks连接的........
但是咱们知道python2.7是没有socks.py模块的,这......,想着死马当活马医吧,直接就把python3.6的socks.py文件复制到了python2.7的Lib下,直接import,把python3.6设置代理的方法复制了进来
import socket
import socks
socks.set_default_proxy(socks.HTTP, 'ip', port)
socket.socket = socks.socksocket
RUN>报错提示缺一个win_inet_pton.py模块,然后把这个模块下载下来,再import,再RUN,然后就看见控制台,出现了密密麻麻的SUCCESS信息。成功了。
ps:python2和python3还是有血缘关系的,哈哈。
点击下载win_inet_pton.py 密码:7m0p
python2.7用socks和socket设置代理的更多相关文章
- python3给socket模块设置代理
最近需要在公司学习socket编程,但是不能直接连接外网,需要设置一个代理才能正常访问.报错示例: import socket def blocking(wd): sock = socket.sock ...
- java中设置代理的两种方式
1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...
- DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
我自己的命令: server端: dns2tcpd -F -d 1 -f ./dns2tcpd.conf 输出: 09:08:59 : Debug options.c:97 Add resource ...
- 将 Tor socks 转换成 http 代理
你可以通过不同的 Tor 工具来使用 Tor 服务,如 Tor 浏览器.Foxyproxy 和其它东西,像 wget 和 aria2 这样的下载管理器不能直接使用 Tor socks 开始匿名下载,因 ...
- crawler_java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件_设置代理
在工作中要用到android,然后进行网络请求的时候,打算使用httpClient. 总结一下httpClient的一些基本使用. 版本是4.2.2. 使用这个版本的过程中,百度很多,结果都是出现的o ...
- 【Android】给Android Studio设置代理
先打开我们的Android Studio,点击工具栏的file下的settings,如下图 之后再搜索框上面输入Proxy,然后按第四步提示点击,如下图 之后就进入了设置代理的界面了,如下图 默认情况 ...
- android studio设置代理更新
我们都知道Android Studio是基于IDEA开发的,而我们写的每一个程序又都是有Gradle构建的,Gradle的优点可以说是很多,被很多程序员夸得没边,但是它有一个特点还是值得我们注意的.我 ...
- java中网络设置代理
三种方式: 1.JVM启动时加参数设置代理 在系统启动时,使用-D项来设置代理. 例如: java -Dhttp.ProxyHost="proxyUrl" -Dhttp.Proxy ...
- Android Studio设置代理,解决检查更新gradle信息的问题
Android Studio是基于JetBrains公司的IDEA开发的,Android Studio里的项目都是由Gradle构建的,Gradle集合了Ant和Maven的优点,又解决了他们的缺点, ...
随机推荐
- 本周六 Apache DolphinScheduler & Doris 将联合线上 Meetup
活动背景 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种背景下,相 ...
- JSON.stringify和JSON.parse的用法
用法概述 所有的现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string) 接受一个 JSON 字符串并将其转换成一个 JavaScri ...
- INSERT插入WHERE判断是否插入(MySQL)
一.INSERT INTO IF EXISTS 具体语法:INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'f ...
- Promise对象 异步编程
Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是 ...
- Debug HashMap
目录 1,HashMap面试必问 2,Debug源码的心得体会 3,JDK 1.7 3.1 用debug分析一个元素是如何加入到HashMap中的[jdk1.7] 3.2 用debug分析HashMa ...
- PHP xml_parser_free() 函数
定义和用法 xml_parser_free() 函数释放 XML 解析器.高佣联盟 www.cgewang.com 如果成功,该函数则返回 TRUE.如果失败,则返回 FALSE. 语法 xml_pa ...
- 5.5 省选模拟赛 B Permutation 构造 贪心
LINK:Permutation 对于这种构造神题 我自然是要补的.为啥就我没想出来哇. 30分还是很好写的 注意8!实际上很小 不需要爆搜 写bfs记录状态即可.至于判断状态是否出现与否 可以开ma ...
- luogu P3829 [SHOI2012]信用卡凸包 凸包 点的旋转
LINK:信用卡凸包 当 R==0的时候显然是一个点的旋转 之后再求凸包即可. 这里先说点如何旋转 如果是根据原点旋转的话 经过一个繁杂的推导可以得到一个矩阵. [cosw,-sinw] [sinw, ...
- 服务治理框架dubbo中zookeeper的使用
Zookeeper提供了一套很好的分布式集群管理的机制,就是它这猴子那个几月层次型的目录树的数据结构,并对书中的节点进行有效的管理,从而可以设计出多种多样的分布式的数据管理模型:下面简要介绍下zook ...
- ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)
当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...