Python爬虫兼WooCommerce产品上传脚本图片上传遇SSLEOFError求助
解决WooCommerce图片上传时的SSLEOFError问题
以下是针对你遇到的SSL握手失败导致图片上传失败的具体解决方案:
补全请求URL的协议头
错误日志中的URL为//wp-json/wc/v3/products/2484/images,缺少http://或https://协议前缀,这会导致请求解析异常。先确认脚本中WooCommerce API的基础URL是否正确拼接,例如完整URL应为https://你的域名/wp-json/wc/v3/products/2484/images。适配服务器SSL配置
部分服务器仅支持特定TLS版本或加密套件,可通过自定义请求适配器强制兼容:import ssl import requests from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager class SSLAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): context = ssl.create_default_context() context.set_ciphers('DEFAULT@SECLEVEL=1') context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 # 禁用老旧TLS版本 kwargs['ssl_context'] = context return super().init_poolmanager(*args, **kwargs) # 初始化会话并挂载适配器 session = requests.Session() session.mount('https://', SSLAdapter())后续上传图片时使用该session发送请求。
优化超时与重试策略
连接超时或服务器响应延迟可能引发EOF错误,可设置合理的重试规则与超时时间:from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry retry_strategy = Retry( total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["POST"] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount('https://', adapter) # 发送上传请求时设置30秒超时 response = session.post(api_url, files=image_files, auth=(consumer_key, consumer_secret), timeout=30)排查证书与文件问题
- 若服务器使用自签名证书,测试环境可临时关闭证书验证(生产环境禁用此操作):
verify=False,或指定本地证书路径:verify='/path/to/cert.pem'。 - 确认上传图片为WooCommerce支持的格式(JPG/PNG等),且文件大小未超过服务器配置的上传上限,可先尝试上传小尺寸测试图片排除文件本身问题。
- 若服务器使用自签名证书,测试环境可临时关闭证书验证(生产环境禁用此操作):
内容的提问来源于stack exchange,提问作者fsociety
相关产品推荐
相关产品推荐

