使用httr调用UnderArmour API时请求Header被忽略,如何启用gzip压缩?
优化UnderArmour API GPX文件下载速度:启用Gzip压缩
嘿,我完全懂你现在的烦恼——用UnderArmour API拉指定地点的GPX路线时,下载速度慢得让人忍不住抠手。既然官方已经明确说明所有端点都支持响应压缩,那咱们直接把Accept-Encoding: gzip请求头加上,就能立竿见影提升速度啦!
为什么这能解决问题?
Gzip压缩会把服务器返回的GPX内容压缩成更小的体积,大幅减少需要传输的数据量。对于GPX这种文本占比高的文件,压缩率通常能达到70%-90%,下载速度自然就上去了。而且大部分主流的HTTP客户端都会自动帮你解压压缩后的响应,不用你手动处理。
代码示例(覆盖常见场景)
下面给你几个常用编程语言/工具的实现,你可以直接对应自己的代码修改:
Python(requests库)
如果你用的是Python的requests,只需要在请求头里加上Accept-Encoding字段就行,requests会自动识别并解压gzip响应:
import requests # 替换成你的GPX请求URL api_url = "https://api.underarmour.com/7.1/你的GPX路径端点" headers = { "Accept": "application/gpx+xml", # 注意:要GPX就设这个,别用示例里的json "Accept-Encoding": "gzip", "Authorization": "Bearer 你的API令牌" # 别忘了加授权头 } # 发送请求,requests自动解压 response = requests.get(api_url, headers=headers) # 保存GPX文件 with open("target_route.gpx", "wb") as gpx_file: gpx_file.write(response.content)
JavaScript(浏览器端fetch)
浏览器的fetch也能自动处理gzip压缩,只要在请求头里配置好:
const apiUrl = "https://api.underarmour.com/7.1/你的GPX路径端点"; const requestHeaders = new Headers({ "Accept": "application/gpx+xml", "Accept-Encoding": "gzip", "Authorization": "Bearer 你的API令牌" }); fetch(apiUrl, { headers: requestHeaders }) .then(res => res.blob()) .then(blob => { // 触发浏览器下载GPX文件 const downloadUrl = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = downloadUrl; link.download = "target_route.gpx"; link.click(); URL.revokeObjectURL(downloadUrl); });
cURL命令行测试
如果想快速验证效果,可以用cURL命令测试:
# 方式1:下载压缩文件后手动解压 curl -H "Accept: application/gpx+xml" -H "Accept-Encoding: gzip" -o route.gpx.gz "你的API URL" gzip -d route.gpx.gz # 方式2:让cURL自动解压并保存为GPX curl -H "Accept: application/gpx+xml" -H "Accept-Encoding: gzip" --compressed -o route.gpx "你的API URL"
几个关键注意点
Accept头别写错:一定要设为application/gpx+xml,而不是官方示例里的application/json,不然可能拿到的不是你要的GPX格式文件。- 确认客户端自动解压:大部分现代HTTP库(requests、fetch、axios等)都支持自动解压,但如果是一些老旧工具,可能需要你手动处理gzip内容。
- 验证压缩效果:可以对比加请求头前后的响应大小,压缩后的体积会大幅缩小,速度提升肉眼可见。
内容的提问来源于stack exchange,提问作者Dubukay
相关产品推荐
相关产品推荐

