You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决tls_client库下载图片后无法打开的问题?

解决tls_client下载图片无法打开的问题

你的问题出在客户端标识(client_identifier)与手动设置的User-Agent版本不匹配,导致服务器返回了非图片格式的内容。

原因分析

tls_client的client_identifier参数会自动生成对应浏览器版本的TLS指纹和默认请求头。你指定了firefox113作为客户端标识,但手动设置的User-Agent是Firefox 101的版本,这种不匹配可能被服务器识别为异常请求,返回的不是图片数据,因此下载的文件无法打开。而requests库没有严格的TLS指纹校验逻辑,所以能正常获取图片。

修复方案

有两种可行的修复方式:

方式1:移除自定义headers,让session自动生成匹配的请求头

直接使用client_identifier对应的默认请求头,避免版本不匹配:

import tls_client

image_link = 'https://cdn.pixabay.com/photo/2016/11/29/12/13/fence-1869401_960_720.jpg'

# 使用firefox113的客户端标识,session会自动生成匹配的User-Agent等请求头
session = tls_client.Session(client_identifier="firefox113")
response = session.get(image_link)
print(response.status_code)

# 验证返回内容类型(可选)
print(response.headers.get('Content-Type'))  # 应输出image/jpeg

with open("image.jpg", "wb") as f:
    f.write(response.content)

方式2:保持client_identifier与User-Agent版本一致

如果你需要保留自定义的User-Agent,将client_identifier改为对应版本的标识:

import tls_client

image_link = 'https://cdn.pixabay.com/photo/2016/11/29/12/13/fence-1869401_960_720.jpg'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:101.0) Gecko/20100101 Firefox/101.0',
}

# 客户端标识改为与User-Agent匹配的firefox101
session = tls_client.Session(client_identifier="firefox101")
response = session.get(image_link, headers=headers)
print(response.status_code)

with open("image.jpg", "wb") as f:
    f.write(response.content)

验证步骤

执行代码前可以先添加以下验证逻辑,确认返回的是图片内容:

print(len(response.content))  # 正常图片大小应该在几十KB到几百KB之间
print(response.headers.get('Content-Type'))  # 正确值为image/jpeg

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:52:38