有没有办法为 esp_https_ota 调用设置 http Header 值?

Posted

技术标签:

【中文标题】有没有办法为 esp_https_ota 调用设置 http Header 值?【英文标题】:Is there a way to set the http Header values for an esp_https_ota call? 【发布时间】:2021-12-13 21:32:31 【问题描述】:

我正在尝试下载在私有 Github 存储库中生成的 firmware.bin 文件。我有代码可以找到正确的资产 url 来下载文件,并且根据 Github 说明,accept 标头需要设置为accept: application/octet-stream 才能获取二进制文件。我只得到 JSON 作为响应。如果我通过邮递员运行相同的请求,我将得到一个二进制文件作为正文。我尝试使用 HTTPClient 下载它,我得到了相同的 JSON 请求。似乎没有按要求设置标头,以告诉 Github 发送二进制内容,因为我刚刚收到 JSON。至于 ArduinoOTA 抽象,我什至看不到如何尝试设置标头,并且在深入研究 esp_https_ota 函数和 http_client 函数时,似乎没有办法为任何这些更高级别的抽象设置标头,因为 http_config据我所知,对象没有标题的位置。我可能会提交一个功能请求以允许这样做,但我是这个编程领域的新手,想先检查一下我是否遗漏了一些东西。

代码返回 JSON,而不是二进制。 URL 是资产的 github rest api url(在邮递员中工作)

HTTPClient http2;
http2.setAuthorization(githubname,githubpass);
http2.addHeader("Authorization","token MYTOKEN");    
http2.addHeader("accept","application/octet-stream");    
http2.begin( firmwareURL, GHAPI_CERT); //Specify the URL and certificate

【问题讨论】:

【参考方案1】:

使用 ESP IDF HTTP 客户端,您可以使用 function esp_http_client_set_header() 将标头添加到已初始化的 HTTP 客户端。

esp_http_client_handle_t client = esp_http_client_init(&config);
esp_http_client_set_header(client, "HeaderKey", "HeaderValue");
err = esp_http_client_perform(client);

如果使用 HTTPS OTA API,您可以register for a callback 为您提供底层 HTTP 客户端的句柄。然后,您可以执行与上述示例完全相同的操作。

【讨论】:

感谢您指出这一点!万一其他人看到这篇文章,我正在使用带有 arduino-esp32 框架的 Platform IO,不幸的是它只打包了 IDF 的 v3.3。我必须弄清楚如何让它使用最新版本的 IDF 来利用该回调,因为它在 3.3 中不存在。

以上是关于有没有办法为 esp_https_ota 调用设置 http Header 值?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 有没有办法判断一个对象是不是设置为自动释放?

设置类的任何属性时,有没有办法调用方法?

有没有办法让 Oracle 为每个查询调用重新计算查询计划?

在 WordPress 插件中调用 TinyMCE

在setupBeforeClass之后有没有办法执行dataprovider函数?

有没有办法使用 UIAccessibility 获取所有设备的辅助功能设置?