如何为SkPy配置代理以解决Windows虚拟机连接失败问题
问题描述
我有一段用SkPy编写的Python代码,在本地笔记本能正常运行,但在Windows虚拟机中必须使用代理http://172.50.235.55:3428才能访问网络。已在Windows系统设置中配置代理,但SkPy代码仍报错HTTPSConnectionpool (host='login.live.com', port=443)。测试用requests手动配置该代理访问login.live.com时,可正常返回状态码200,现需为SkPy配置与requests一致的代理。
原SkPy代码
from skpy import Skype sk = Skype(username, password) # 连接Skype sk.user # 当前用户 sk.contacts # 联系人列表 sk.chats # 会话列表 ch = sk.chats.create(["joe.4", "daisy.5"]) # 创建群聊 ch = sk.contacts["joe.4"].chat # 获取一对一会话 ch.sendMsg(content) # 发送文本消息 ch.sendFile(open("song.mp3", "rb"), "song.mp3") # 上传文件 ch.sendContact(sk.contacts["daisy.5"]) # 分享联系人 ch.getMsgs() # 获取近期消息
测试用requests代码
import requests url = 'https://login.live.com' proxy = 'http://172.50.235.55:3428' proxies = { 'http': proxy, 'https': proxy } response = requests.get(url, proxies=proxies) print(f'Status Code: {response.status_code}') print(f'Response Content: {response.text}')
解决方案
SkPy底层依赖requests库,可通过创建配置好代理的requests Session对象,传入Skype类的构造参数实现代理配置,具体修改如下:
from skpy import Skype import requests # 配置代理地址 proxy = "http://172.50.235.55:3428" proxies = { "http": proxy, "https": proxy } # 创建带代理的requests Session session = requests.Session() session.proxies.update(proxies) # 使用配置好的Session初始化Skype连接 sk = Skype(username, password, session=session) # 后续操作与原代码一致 sk.user # 当前用户 sk.contacts # 联系人列表 sk.chats # 会话列表 ch = sk.chats.create(["joe.4", "daisy.5"]) # 创建群聊 ch = sk.contacts["joe.4"].chat # 获取一对一会话 ch.sendMsg(content) # 发送文本消息 ch.sendFile(open("song.mp3", "rb"), "song.mp3") # 上传文件 ch.sendContact(sk.contacts["daisy.5"]) # 分享联系人 ch.getMsgs() # 获取近期消息
说明
- 先初始化requests Session并注入代理配置,确保所有请求走指定代理
- Skype类支持通过
session参数接收自定义的requests会话,以此替代默认会话 - 配置后,SkPy的所有网络请求(包括登录login.live.com)都会遵循该代理设置,与requests测试代码行为一致
内容的提问来源于stack exchange,提问作者Mostafa Karami
相关产品推荐
相关产品推荐

