调用DeepL免费API的curl命令无返回,请求排查解决方法
问题描述
我创建了DeepL免费账号并导出了API_KEY,执行以下curl命令后没有任何返回信息:
~$ echo $API_KEY {mykey shows up here} ~$ curl -X POST https://api-free.deepl.com/v2/translate \ > --header "Content-Type: application/json" \ > --header "Authorization: DeepL-Auth-Key $API_KEY" \ > --data '{"text": ["Hello world!"],"target_lang": "DE"}' ~$
编辑:添加-v参数后的命令执行结果如下,仍未得到翻译内容:
~$ curl -v -X POST https://api-free.deepl.com/v2/translate \ > --header "Content-Type: application/json" \ > --header "Authorization: DeepL-Auth-Key "$API_KEY \ > --data '{"text": ["Hello world!"],"target_lang": "DE"}' Note: Unnecessary use of -X or --request, POST is already inferred. * Host api-free.deepl.com:443 was resolved. * IPv6: (none) * IPv4: 172.65.225.25 * Trying 172.65.225.25:443... * Connected to api-free.deepl.com (172.65.225.25) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / id-ecPublicKey * ALPN: server accepted h2 * Server certificate: * subject: CN=deepl.com * start date: Feb 16 09:06:48 2025 GMT * expire date: May 17 09:06:47 2025 GMT * subjectAltName: host "api-free.deepl.com" matched cert's "*.deepl.com" * issuer: C=US; O=Let's Encrypt; CN=E6 * SSL certificate verify ok. * Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384 * Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption * Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption * using HTTP/2 * [HTTP/2] [1] OPENED stream for https://api-free.deepl.com/v2/translate * [HTTP/2] [1] [:method: POST] * [HTTP/2] [1] [:scheme: https] * [HTTP/2] [1] [:authority: api-free.deepl.com] * [HTTP/2] [1] [:path: /v2/translate] * [HTTP/2] [1] [user-agent: curl/8.5.0] * [HTTP/2] [1] [accept: */*] * [HTTP/2] [1] [content-type: application/json] * [HTTP/2] [1] [authorization: DeepL-Auth-Key {keyhidden}] * [HTTP/2] [1] [content-length: 46] > POST /v2/translate HTTP/2 > Host: api-free.deepl.com > User-Agent: curl/8.5.0 > Accept: */* > Content-Type: application/json > Authorization: DeepL-Auth-Key {keyhidden} > Content-Length: 46 > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 403 < date: Tue, 18 Mar 2025 18:28:57 GMT < access-control-allow-origin: * < strict-transport-security: max-age=63072000; includeSubDomains; preload < server-timing: l7_lb_tls;dur=360, l7_lb_idle;dur=7, l7_lb_receive;dur=0, l7_lb_total;dur=361 < access-control-expose-headers: Server-Timing, X-Trace-ID < x-trace-id: 74a2bd30b113472d92df2b1141698ab0 < * Connection #0 to host api-free.deepl.com left intact
问题分析与解决
从-v输出的< HTTP/2 403可以明确,服务器返回了403 Forbidden,这是核心问题,以下是可能的原因和对应解决方案:
API密钥格式错误或无效
免费版DeepL API密钥以free-开头,检查你的密钥是否符合格式。如果密钥已过期、被封禁或未正确复制(比如多了空格/换行),都会触发403。重新登录DeepL账号的API设置页面,复制完整的密钥替换当前的$API_KEY。Authorization头格式问题
编辑后的命令中,Authorization头的写法有问题:"Authorization: DeepL-Auth-Key "$API_KEY,这里的引号导致$API_KEY和前面的字符串之间可能出现空格,或者变量解析异常。正确的写法应该是把整个头内容放在一对引号里:--header "Authorization: DeepL-Auth-Key $API_KEY"免费版API端点使用错误
确认你使用的是免费版端点https://api-free.deepl.com/v2/translate,如果误用到付费版端点https://api.deepl.com/v2/translate,也会返回403(免费密钥无法访问付费端点)。IP地址被限制
DeepL免费API会对请求IP进行限制,如果你的IP在DeepL的黑名单中,或者短时间内请求次数超过免费额度(免费版每月50万字符),会触发403。检查你的请求频率,或者切换网络环境测试。请求数据格式问题
虽然当前的--data内容看起来正确,但确保JSON格式没有语法错误,比如引号是否配对、逗号是否正确。可以用JSON校验工具检查你的请求体。
内容的提问来源于stack exchange,提问作者user603749

