Debian12.5调用DHL API遇curl(52)空回复问题求助
DHL追踪API调用返回
curl: (52) Empty reply from server问题排查 问题背景
在Debian 12.5系统上使用curl调用DHL追踪API时,出现curl: (52) Empty reply from server错误。已确认以下信息:
- DHL未封禁当前服务器IP
- 相同请求在其他服务器可正常执行
- 尝试添加
--tlsv1.2强制使用TLS1.2后问题依旧
执行的curl命令及完整日志
原执行命令
curl -v -k -X -L GET 'https://api-eu.dhl.com/track/shipments?trackingNumber=7670087740' -H 'DHL-API-Key: WGP0HGo26c5OFRclZHqPHTAEpXXXXXXX'
详细日志输出
* Trying 172.66.40.55:80... * Connected to GET (172.66.40.55) port 80 (#0) > -L / HTTP/1.1 > Host: GET > User-Agent: curl/7.88.1 > Accept: */* > DHL-API-Key: WGP0HGo26c5OFRclZHqPHTAEpXXXXXXX > < HTTP/1.1 403 Forbidden < Date: Fri, 28 Jun 2024 21:10:23 GMT < Content-Type: text/plain; charset=UTF-8 < Content-Length: 16 < Connection: close < X-Frame-Options: SAMEORIGIN < Referrer-Policy: same-origin < Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 < Expires: Thu, 01 Jan 1970 00:00:01 GMT < Server: cloudflare < CF-RAY: 89b0a9cc4e284c78-HEL < * Closing connection 0 error code: 1003* Trying 34.89.220.138:443... * Connected to api-eu.dhl.com (34.89.220.138) port 443 (#1) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 * ALPN: server accepted http/1.1 * Server certificate: * subject: C=DE; ST=Nordrhein-Westfalen; L=Bonn; O=Deutsche Post AG; CN=api.dhl.com * start date: Apr 2 06:41:20 2024 GMT * expire date: Apr 2 06:40:20 2025 GMT * issuer: C=DE; O=Deutsche Post AG; CN=DPDHL Global TLS CA - I5 * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. * using HTTP/1.1 > -L /track/shipments?trackingNumber=7670087740 HTTP/1.1 > Host: api-eu.dhl.com > User-Agent: curl/7.88.1 > Accept: */* > DHL-API-Key: WGP0HGo26c5OFRclZHqPHTAEpXXXXXXX > * Empty reply from server * Closing connection 1 * TLSv1.2 (OUT), TLS alert, close notify (256): curl: (52) Empty reply from server
问题分析与解决方案
从日志可定位核心问题:
- curl参数顺序错误:
-X -L GET的写法违反参数规则,-X后应直接跟请求方法,-L是独立参数。错误写法导致curl将-L识别为请求方法、GET识别为目标主机,出现Connected to GET (172.66.40.55) port 80的异常日志。 - 后续即使连接到正确的DHL API地址,混乱的参数导致请求格式错误(请求行变为
-L /track/shipments?trackingNumber=7670087740 HTTP/1.1),服务器无法识别,最终返回空回复。
修正后的curl命令
调整参数顺序,-L作为独立参数前置,-X GET可省略(GET为curl默认请求方法):
# 写法1:省略默认GET请求方法 curl -v -k -L 'https://api-eu.dhl.com/track/shipments?trackingNumber=7670087740' -H 'DHL-API-Key: WGP0HGo26c5OFRclZHqPHTAEpXXXXXXX' # 写法2:明确指定GET请求方法 curl -v -k -L -X GET 'https://api-eu.dhl.com/track/shipments?trackingNumber=7670087740' -H 'DHL-API-Key: WGP0HGo26c5OFRclZHqPHTAEpXXXXXXX'
额外建议
- 移除
-k参数,确保证书验证正常。若Debian系统存在证书验证问题,可更新根证书包:apt update && apt install ca-certificates update-ca-certificates
内容的提问来源于stack exchange,提问作者Simone Tone Ceschi
相关产品推荐
相关产品推荐

