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

如何为esp_https_ota调用设置HTTP Header以拉取GitHub私有仓库固件?

问题排查与解决

1. 修复授权头冲突

你当前代码同时调用了setAuthorization()和手动添加Authorization令牌头,二者会产生冲突:setAuthorization()会自动生成Basic Auth格式的授权头,和你手动添加的令牌格式授权头共存时,会导致GitHub的认证逻辑异常,最终优先返回JSON格式的错误响应而非二进制固件。
直接删除http2.setAuthorization(githubname,githubpass);这行即可,GitHub私有资产的令牌认证仅需要Authorization: token <你的令牌>一个头即可正常生效。

2. 修正请求头大小写

部分版本的ESP32 Arduino HTTPClient库对自定义头的大小写处理存在兼容问题,将小写的accept改为首字母大写的标准格式即可:

http2.addHeader("Accept", "application/octet-stream");

3. ESP HTTPS OTA添加自定义头的方案

现有版本的ESP-IDF以及2.0.5版本及以上的Arduino ESP32核心已经支持在OTA流程中添加自定义请求头,不需要额外提交功能请求:
你可以通过esp_https_ota_config_t的http_client_initial_cb回调函数,在HTTP客户端初始化完成后手动插入需要的请求头,示例逻辑如下:

// 回调函数,用于添加自定义头
static esp_err_t http_client_init_callback(esp_http_client_handle_t client)
{
    esp_http_client_set_header(client, "Accept", "application/octet-stream");
    esp_http_client_set_header(client, "Authorization", "token 你的令牌");
    return ESP_OK;
}

// OTA初始化逻辑
esp_https_ota_config_t ota_config = {
    .url = firmwareURL,
    .cert_pem = GHAPI_CERT,
    .http_client_initial_cb = http_client_init_callback,
};
esp_err_t ret = esp_https_ota(&ota_config);

内容的提问来源于stack exchange,提问作者Michael Bender

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:04