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

调用Google Translate API遇411错误,如何添加Content-Length请求头?

解决Google Translate API翻译超长文本时的HTTP 411错误

遇到这个HTTP 411错误很常见,通常是因为超长文本触发了客户端的分块传输编码,而服务器端要求必须携带Content-Length请求头。下面给你具体的解决方法,包括如何添加请求头,以及正确计算长度的方式:

一、核心原理:计算Content-Length的正确方式

Content-Length对应的是请求体的字节数,不是文本的字符数。所以计算时需要把文本转换成UTF-8编码的字节流,再取长度:

# 计算文本的UTF-8字节长度
content_length = len(text.encode('utf-8'))

这个数值就是你需要填入Content-Length头的内容。

二、在Google Translate Python客户端中添加Content-Length头

官方的google-cloud-translate客户端基于requests库,我们可以通过自定义Session来自动为所有请求添加Content-Length头,避免手动处理每个请求:

import requests
from google.cloud import translate
import six

# 自定义Session,自动添加Content-Length头
class CustomTranslateSession(requests.Session):
    def prepare_request(self, request):
        # 先让父类完成请求准备
        prepared_request = super().prepare_request(request)
        # 只有当请求有body且未设置Content-Length时才添加
        if prepared_request.body and not prepared_request.headers.get('Content-Length'):
            # 计算请求体的字节长度
            body_length = len(prepared_request.body)
            prepared_request.headers['Content-Length'] = str(body_length)
        return prepared_request

def translate_text(text, target):
    # 使用自定义Session初始化翻译客户端
    translate_client = translate.Client(session=CustomTranslateSession())
    if isinstance(text, six.binary_type):
        text = text.decode('utf-8')
    result = translate_client.translate(
        text, target_language=target)
    print(u'Text: {}'.format(result['input']))
    print(u'Translation: {}'.format(result['translatedText']))
    print(u'Detected source language: {}'.format(
        result['detectedSourceLanguage']))

# 替换为你的超长文本
txtTranslate = 'a long long text...'
conteudo = translate_text(txtTranslate, target='pt')

代码说明:

  • 我们继承了requests.Session并重写了prepare_request方法,在请求发送前自动检查并添加Content-Length头;
  • 这种方式对所有通过该客户端发送的请求生效,不用每次调用translate都手动处理;
  • 为什么不直接手动设置?因为客户端内部会处理请求体的编码和组装,自定义Session能确保我们拿到的是最终发送的请求体字节长度,避免计算错误。

三、为什么会出现这个错误?

当文本长度超过一定阈值时,requests库默认会使用分块传输编码(Transfer-Encoding: chunked),此时不会自动添加Content-Length头。但部分服务器配置要求必须携带这个头,就会返回HTTP 411错误。通过强制添加Content-Length,我们可以绕过分块传输,改用固定长度的请求体格式。

内容的提问来源于stack exchange,提问作者Eduardo Sena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:17:59