老頭是真的老了,都奔五的人了。
如今中年男人工作壓力大,生活壓力大,而公司的壓力更大。在聽了python讓生活更美好的廣告后,老頭為了讓晚上還能早點回家,咬牙省下了一個月的私房錢買了兩本正版書,從此踏上了苦B的Python學習之旅。
好了,話不多說了,今天我們就聊聊如何讓itchat支持代理的事吧。
事情是這樣滴:
老頭所在公司要每天把一些內網(wǎng)的報表數(shù)據(jù)扒拉下來,把業(yè)績分個一二三等,在微信群里通報通報(自動扒拉報表的過程以后再表)。
因為每天各經(jīng)營單位都是晚上6點半以后才差不多結束營業(yè),因此老頭只能在7點鐘左右進行統(tǒng)計,唉,也只有我們這些有房有貸有家小的中年男人才能這樣工作。等到導完數(shù)據(jù),導入excel模板,統(tǒng)計完畢再發(fā)微信群,也差不多7點半了,在魔都,這個點下班回家,差不多得8點半才到家吃飯。
這樣干了幾個星期,實在有點吃不消了,雖然python是剛學的,才學了print(),也只有硬上了。
總之,經(jīng)過了更苦B的幾個星期的program自覺加班過程,老頭終于成功的把報表處理及報告內容生成編成了程序,原來半個小時工作變成了2分鐘,只要把報告內容copy到PC版微信里發(fā)出去就行了。
老頭這樣舒服了幾天,沒想到,各位看通報的80、90后吃瓜群眾又提出了更高的要求,要求更美觀,于是老頭要先把報告通過PC版微信發(fā)給自己,然后再在微信上加上各種粉紅色的emoji再發(fā)。老頭人老眼花,發(fā)emoji實在累。就想著有木有辦法直接讓程序把報告內容給發(fā)了,于是爬遍各大網(wǎng)站,大家一致推薦itchat好用量又足。
老頭滿懷希望pip install itchat后,發(fā)現(xiàn)事情大條了:itchat居然不支持代理。
話說老頭所在的公司,雖然業(yè)績不如大公司,可對IT管理之嚴格可比肩業(yè)內老大,比如上網(wǎng)必須通過代理等等。
這可怎么辦,老頭在吃瓜群眾中還是有點IT威望的,可不能因為這點事而弱了自己的名頭。
反正公司內網(wǎng)環(huán)境訪問外網(wǎng)都是必須要用代理的,那就把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協(xié)議的。
第二步,找到core.py
找到?
```
self.s = requests.Session()
```
在下面插入一行。
```
self.s.proxies.update(config.PROXIES)
```
第三步,找到utils.py
找到
```
def test_connect(retryTime=5):
```
把本段函數(shù)里的
```
r = requests.get(config.BASE_URL)
```
改成:
```
r = requests.get(config.BASE_URL,proxies = config.PROXIES)
```
第四步,找到components目錄下的login.py
找到?
```
def get_msg(self)
```
把本段函數(shù)里的
```
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)
```
然后運行主程序,一切正常,搞定收工。
第一次寫簡書,寫得不好,請大家不吝打賞。