This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF-LAUNCHXL:[OTA-GitHub:error] HTTP 响应错误:400

Guru**** 2484615 points
Other Parts Discussed in Thread: CC3235SF, CC3220SF

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1267012/cc3220sf-launchxl-ota-github-error-http-response-error-400

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3235SFCC3220SF

我正在使用 MQTT 客户端示例代码 来测试 OTA 功能。 在 Launchpad 上按下 SW2开关后、 收到错误消息"[OTA-GitHub:error] HTTP Response Error:400"。

随附图像供参考。

请检查并告诉我有什么问题。

此致、

曼朱纳特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    400错误表示 HTTP 请求错误。

    这意味着它不喜欢 HTTP URI 上的某些内容。

    您能仔细检查一下吗?

    此致、

    什洛米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉、我不理解、您能详细说明一下吗。

    以下是 otauser.h 代码、供您参考。

    /*
    *版权所有(C) 2016-2021、德州仪器(TI)公司
    保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用,有或没有
    *修改,在以下条件允许的条件下
    *满足:
    *
    **源代码的重新分发必须保留以上版权
    *请注意,本条件清单和以下免责声明。
    *
    **二进制形式的再分发必须复制上述版权
    *通知,本条件清单和下述免责声明在
    *与分发一起提供的文档和/或其他材料。
    *
    **德州仪器公司名称或公司名称
    *其贡献者可用于认可或推广派生的产品
    *从本软件未经事先书面许可。
    *
    *本软件由版权持有者和贡献者"按原样"提供
    本站明确声明不作出任何种类的所有明示或暗示的保证,包括但不限于关于适销性、适用于
    *对特定产品的适销性和适用性的暗示保证
    *免责声明。 在任何情况下,版权所有者或
    *贡献者对任何直接、间接、偶然、特殊、
    *示例性或后果性损害(包括但不限于:
    *替代产品或服务的采购;使用、数据或利润的损失;
    *或业务中断)然而造成和任何责任理论,
    *无论是合同,严格的责任,或侵权(包括疏忽或
    *其他)因使用本软件而产生的任何原因、
    *即使被告知此类损害的可能性。
    */

    //*****
    //包括
    //*****
    //标准包括
    #ifndef OTA_SETTINES_H
    #define OTA_SETTINGS_H

    /*
    *定义允许的最低严重性级别。
    *使用 E_debug 启用 OTA 内部消息
    *选项: e_trace、E_debug、E_info、E_warning、E_error、 E_致命
    */
    #define OTA_IF_DEBUG_LEVEL E_INFO

    #define cloud_ota_support (1)// HTTP 客户端-从(远程)文件服务器下载内容
    #define local_ota_support (0)// HTTP 服务器-从 HTTP 客户端上传(移动设备连接到本地网络)
    #define internal_update_support (0)//文件系统-从本地(tar)文件加载内容

    #define OTA_VERSION_LEN 14 /*"YYMMDDHHMMSS"的大小*/
    #define OTA_URL_LEN 900

    #if cloud_ota_support
    /**
    *编译 Github 和 Dropbox 以便在代码中使用
    */
    #define OTA_VENTER_GITHUM_SUPPORT (1)
    #define OTA_VENTER_DBOP_SUPPORT (1)

    #define use_TI_example
    #if OTA_VENTER_GITHUB_SUPPORT
    #ifdef use_TI_example
    /*以下是中项目的 GitHub 参数:
    * github.com/.../SEC_OTA_CC3220SF
    */
    #define GitHub_user_name "manjunathg13"
    #define GitHub_USER_TOKEN_B64 "xxxxxxxxxxxxxxxxxxxxxxx"
    #define GitHub_user_repo "OTAGitHubTest"
    #define GitHub_user_path"">github.com/.../OTAGitHubTest.git"
    #else
    //#define Hub_user_name // GitHub 用户名

    //注意:个人访问令牌应以 base64格式提供。
    //要生成 base64格式,请使用以下 bash 命令(可接受任何其他 base64转换器):
    //"echo (回波)" | base64"
    //例如"echo GHP_HcxGxktQb4xmpHpHpNkzrHT66WrFI3l0l5x9h | base64"
    //重要提示:确保令牌具有"No Expiration"(无过期)启用只读访问(不应启用 COPE)
    //#define GitHub_USER_TOKEN_B64 // GitHub 用户令牌 Base64格式

    //#define GitHub_user_repo // GitHub 存储库名称
    //#define GitHub_USER_PATH //存储库中与
    //包含 tar 文件的文件夹
    #ifndef github 用户名
    #error "请在\"ota_settings.h\"(以上)中定义您的个人 GitHub 帐户参数"
    #endif
    #endif
    #endif /* ota_vender_gitHub_support */

    #if OTA_VENTOR_DBOP_SUPPORT
    #ifdef use_TI_example
    /*以下是中项目的 Dropbox 参数:
    www.dropbox.com/.../SEC_OTA_CC3220SF
    */


    #define Dropbox_USER_TOK"apCeaH3vKRsAAAAAAAAAAAAd6VJmPMR-vsXc54ce3kjpVMO5oA6nv53eV5IWLpCuHd"
    #define DROP_USER_PATH "SEC_OTA_CC3235SF"
    #else
    //#define Dropbox_user_token // Dropbox 应用令牌
    //#define Dropbox_USER_PATH //应用程序内与
    //包含 tar 文件的文件夹
    #ifndef dropbox_user_token
    #error "请在\"ota_settings.h\"(上图)中定义您的个人 Dropbox 帐户参数"
    #endif
    #endif
    #endif /* ota_vender_dropbox_support */

    #else
    #define OTA_VENTER_GITHUM_SUPPORT (0)
    #define OTA_VENTER_DBOP_SUPPORT (0)
    #endif // cloud_ota_support

    /*更多 OTA 设置*/
    #define OTA_DISABLE_DELAY_PROTECTION (0)//如果设置为(1)-不会验证 OTA 版本
    //可以安装较旧的版本。
    #define OTA_COMMIT_TIMEOUT 50 //看门狗超时(以秒为单位、最大值:104秒)

    /*以下是一个内部定义-
    *请勿更改和更新上述支持的 OTA 方法*/
    #define OTA_support (cloud_OTA_support|local_OTA_support|internal_update_support)

    #endif /* OTA_SETTINES_H */

    此致、

    曼朱纳特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    正如您在 URI: PrintOut (UI:打印输出)下方所看到的那样,URL 看起来很奇怪(中间是 https:)。

    您需要提供 tar 文件所在的正确 URL。

    GitHub_user_name 和 GitHub_user_repo 看起来正常、但 GitHub_user_path 不是。

    代码中的 URI 来自:

    #define Request_URI      "/repos/" gitHub_user_name "/"gitHub_user_repo "/content/"gitHub_user_path

    您需要确保最终的 URL 是 tar 文件所在的位置。

    此致、

    什洛米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我更新了路径、仍然收到相同的错误。

    请查看所附的屏幕截图以供参考。

    此致、

    曼朱纳特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以看到 request_URI 与 tar 文件的实际位置并不相关、这就是它失败的原因。

    您是否可以仅针对测试手动修改它? 例如,更改" #define Request_URI      "/repos/" gitHub_user_name "/"gitHub_user_repo "/content/"gitHub_user_path" 正确的位置(即您发送的最后一张图片中的位置)。 我认为 URL 还包括您的案例中的实际文件名 cc3220sf_mqtt_client_tirtos7_ota.tar)。

    什洛米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否附加您的 OTA_VENTER_GitHub.c 文件?

    我想看看 HOSTNAME。

    基本上,如果你在浏览器中键入以下内容,你应该得到一个带有文件列表的 json。

    https://api.github.com/repos/manjunathg13/OTAGitHubTest/contents/OTA_SEP_07

    这与代码中的语法完全相同。

    这是我得到的结果、看起来不错:

    [
    {
    "名称":"cc3220sf_mqtt_client_tirtos7_ota.tar"、
    "路径":"ota_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar"、
    "SHA":"D5479c4d9818ca51d64a98e7d6b12e2372534277"、
    "尺寸":378880、
    "url":"https://api.github.com/repos/manjunathg13/OTAGitHubTest/contents/OTA_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar?ref=main"、
    "HTML_URL":"https://github.com/manjunathg13/OTAGitHubTest/blob/main/OTA_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar"、
    "Git_url":"https://api.github.com/repos/manjunathg13/OTAGitHubTest/git/blobs/d5479c4d9818ca51d64a98e7d6b12e2372534277"、
    "download_url":"https://raw.githubusercontent.com/manjunathg13/OTAGitHubTest/main/OTA_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar"、
    "类型":"文件"、
    "_links":{
    "自身":" https://api.github.com/repos/manjunathg13/OTAGitHubTest/contents/OTA_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar?ref=main"、
    "Git":https://api.github.com/repos/manjunathg13/OTAGitHubTest/git/blobs/d5479c4d9818ca51d64a98e7d6b12e2372534277"、
    "HTML":"https://github.com/manjunathg13/OTAGitHubTest/blob/main/OTA_SEP_07/cc3220sf_mqtt_client_tirtos7_ota.tar"
    }
    }]
    

    请尝试了解流程中的哪个位置会中断、并给出400错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请查看随附的  OTA_VENTER_GitHub.c filee2e.ti.com/.../ota_5F00_vendor_5F00_github.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果我更新#define Request_URI      "">github.com/.../cc3220sf_mqtt_client_tirtos7_ota.tar"

     在 UART 中获取"[mqtt_app::info] sl_socket_ASYNC_EVENT 套接字事件2"。 请查看随附的图像以供参考。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    好的、至少我可以看到 json 文件很好。

    请保留自动生成 URI 的常规设置。

    基本上、它的工作方式是接收 json 文件、然后解析并使用 download_URL。

    要了解更多信息、您需要准确地了解失败的地方(获取 json、download_url 等)。

    我建议通过 otauser.h 中的 SL_ENABLE_OTA_DEBUG_TRACES 打开内部 OTA 调试。

    此致、

    什洛米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、很抱歉响应出现延迟。

    MQTT 客户端项目中没有 otauser.h 文件。 您能告诉我在哪里可以启用调试吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    为此、您需要在打开此定义的情况下重新编译 OTA 库。

    该项目属于 /source/ti/net/ota.

    什洛米