如何让itchat支持代理

老头是真的老了,都奔五的人了。

如今中年男人工作压力大,生活压力大,而公司的压力更大。在听了python让生活更美好的广告后,老头为了让晚上还能早点回家,咬牙省下了一个月的私房钱买了两本正版书,从此踏上了苦B的Python学习之旅。

好了,话不多说了,今天我们就聊聊如何让itchat支持代理的事吧。

事情是这样滴:

老头所在公司要每天把一些内网的报表数据扒拉下来,把业绩分个一二三等,在微信群里通报通报(自动扒拉报表的过程以后再表)。

因为每天各经营单位都是晚上6点半以后才差不多结束营业,因此老头只能在7点钟左右进行统计,唉,也只有我们这些有房有贷有家小的中年男人才能这样工作。等到导完数据,导入excel模板,统计完毕再发微信群,也差不多7点半了,在魔都,这个点下班回家,差不多得8点半才到家吃饭。

这样干了几个星期,实在有点吃不消了,虽然python是刚学的,才学了print(),也只有硬上了。

总之,经过了更苦B的几个星期的program自觉加班过程,老头终于成功的把报表处理及报告内容生成编成了程序,原来半个小时工作变成了2分钟,只要把报告内容copy到PC版微信里发出去就行了。

老头这样舒服了几天,没想到,各位看通报的80、90后吃瓜群众又提出了更高的要求,要求更美观,于是老头要先把报告通过PC版微信发给自己,然后再在微信上加上各种粉红色的emoji再发。老头人老眼花,发emoji实在累。就想着有木有办法直接让程序把报告内容给发了,于是爬遍各大网站,大家一致推荐itchat好用量又足。

老头满怀希望pip install itchat后,发现事情大条了:itchat居然不支持代理。

话说老头所在的公司,虽然业绩不如大公司,可对IT管理之严格可比肩业内老大,比如上网必须通过代理等等。

这可怎么办,老头在吃瓜群众中还是有点IT威望的,可不能因为这点事而弱了自己的名头。

反正公司内网环境访问外网都是必须要用代理的,那就把itchat的原码简单改改,研究了一下itchat的原码,原来它都是通过requests.session.get或requests.session.post的方法和weixin服务器连接的,这就好办了嘛,只要把session初始化时加入proxy支持就OK了。

说干就干。

第一步,先找到itchat安装的目录,找到config.py

一般内容是这样的:

```

import os, platform

VERSION = '1.3.10'

BASE_URL = 'https://login.weixin.qq.com'

OS = platform.system() # Windows, Linux, Darwin

DIR = os.getcwd()

DEFAULT_QR = 'QR.png'

TIMEOUT = (10, 60)

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'

```

可以在里面加上一行:PROXIES = {'http':'http://公司代理IP地址:公司代理http端口号','https':'https://公司代理IP地址:公司代理https端口号'}

有人说proxy我只用http的行不,老头在这里遇到过坑,明白告诉你,不行,weixin都要用到https协议的。

第二步,找到core.py

找到 

```

self.s = requests.Session()

```

在下面插入一行。

```

self.s.proxies.update(config.PROXIES)

```

第三步,找到utils.py

找到

```

def test_connect(retryTime=5):

```

把本段函数里的

```

r = requests.get(config.BASE_URL)

```

改成:

```

r = requests.get(config.BASE_URL,proxies = config.PROXIES)

```

第四步,找到components目录下的login.py

找到 

```

def get_msg(self)

```

把本段函数里的

```

r = self.s.post(url, data=json.dumps(data), headers=headers, timeout=config.TIMEOUT)

```

改成

```

r = self.s.post(url, data=json.dumps(data), headers=headers, timeout=config.TIMEOUT,proxies = config.PROXIES)

```

然后运行主程序,一切正常,搞定收工。

第一次写,写得不好,请大家不吝打赏。

你可能感兴趣的:(如何让itchat支持代理)