基于Custom Tkinter的WordPress自动发博工具遇ssl.SSLEOFError求助
WordPress自动发布工具SSL错误解决方案
针对你遇到的ssl.SSLEOFError: EOF occurred in violation of protocol错误,结合代码和错误栈,给出以下针对性解决思路:
1. 不要复用单个WordPress XML-RPC Client实例
你的代码在循环外创建了client实例,多次调用client.call()时,底层XML-RPC的长连接可能被服务器主动断开,导致SSL连接中断。
修改方案:将Client实例的创建放到循环内部,每次发布文章都新建连接:
for i, title in enumerate(titles): # 每次循环新建WordPress Client client = Client(url, username, password) # 后续生成内容、上传图片、发布文章的代码... # 发布完成后显式关闭连接(可选) client.server.close()
2. 增加请求间隔,规避频率限制
连续快速的API请求可能触发WordPress的反爬策略,导致服务器强制断开连接。除了现有针对Pexels的time.sleep(1),在发布文章后增加更长的间隔:
# 发布文章后添加间隔 post_id = client.call(NewPost(post)) print(f"Post '{title}' created successfully with ID: {post_id}") time.sleep(3) # 增加3秒间隔,可根据情况调整
3. 自定义XML-RPC Transport,修复SSL兼容性问题
部分服务器的SSL配置与Python默认xmlrpc.client的Transport不兼容,可自定义Transport并指定SSL上下文:
from xmlrpc.client import SafeTransport import ssl class CustomSafeTransport(SafeTransport): def __init__(self, ssl_context=None, *args, **kwargs): self._ssl_context = ssl_context super().__init__(*args, **kwargs) def make_connection(self, host): conn = super().make_connection(host) if self._ssl_context: conn.context = self._ssl_context return conn # 创建自定义SSL上下文 ssl_context = ssl.create_default_context() ssl_context.set_ciphers('DEFAULT@SECLEVEL=1') # 降低安全级别适配旧服务器 # 使用自定义Transport创建Client client = Client(url, username, password, transport=CustomSafeTransport(ssl_context=ssl_context))
代码中其他需要修正的小问题
- 循环中
enumerate的i被重新赋值为0,会导致后续文件名生成错误,建议重命名内层循环变量:# 将内层的i改为idx idx = 0 v_new = [] for kw, v in keywords: v_new.append(v) idx += 1 image_title = kw break image_path重复赋值,去掉冗余的赋值语句:image_path = f"{idx+1}_{keywords[0]}_{keywords[1]}.jpg"
内容的提问来源于stack exchange,提问作者AIT SIDI LAHCEN KARIM
相关产品推荐
相关产品推荐

