【问题标题】:Is there a way to set the http Header values for an esp_https_ota call?有没有办法为 esp_https_ota 调用设置 http Header 值?
【发布时间】: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

【问题讨论】:

    标签: arduino httpclient esp32 ota


    【解决方案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 中不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2013-10-05
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多