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.

[参考译文] CC3220:如何使用自定义 http 标头

Guru**** 2568565 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/754038/cc3220-how-to-use-custom-http-header

器件型号:CC3220

您好!

我的客户对自定义 http 标头有疑问。
他希望为 http 标头指定 API 密钥和原始 ID。

根据“网络服务2.30.00.10发行说明”,它说
“NS-128:使 HttpClient 能够在 HTTP 请求中发送自定义标头”。
因此、似乎可以使用自定义标头。
(SDK 版本为2.30.00.05)
但不清楚如何做到这一点。

客户尝试使用
“HttpClient_setHeader”或“HttpClient_setHeaderByName”,但没有成功。
从服务器返回错误403。

谢谢、此致、
Kot

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

    客户从 HttpClient_setHeader 获取了什么返回值? 此外、我们的 HttpGet 演示使用 HttpClient_setHeader。 它可能有助于了解如何使用它。

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

    您好、Jesu、

    感谢您的快速回复。

    HttpClient_setHeader 返回0。
    HttpClient_sendRequest 返回403:HTTP_SC_Forbidden。
    (当使用具有步进执行的仿真器时、HttpClient_sendRequest 返回-3003:HttpClient_ERESPONSEINVALID)
    请参阅以下客户代码片段。

    //使用 HttpClient_setHeader
    #define HOSTNAME"https://xxxxxxxxxx.com"
    #define GET_MACHINE_INFO "/pets/1
    #define API_SET_HEADER_AUTH x-api-key:xxxxxxxxxxxxxxxxxxxxxxx\r\n"\
    "x-user-uuid:xxxxxxx"
    #define API_SET_HEADER_ACCE "application/json"
    
    void* httpTask (void* pvParameters)
    {
    
    bool MoreDataFlag = false;
    char data[HTTP_MIN_RECV];
    int16_t ret = 0;
    int16_t len = 0;
    
    
    HttpClient_handle httpClientHandle;
    int16_t statusCode;
    
    // https 启用
    HttpClient_extSecParams httpClientSecParams;
    
    httpClientSecParams.privateKey =空;
    httpClientSecParams.clientCert =空;
    httpClientSecParams.RootCA ="test-certification.pem.crt";
    httpClientHandle = HttpClient_create (&statusCode、0);
    
    RET =HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_authorization、
    API_SET_HEADER_AUTH、strlen (API_SET_HEADER_AUTH)、
    HttpClient_HFIELD_PERSISTENT);
    RET =HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    API_SET_HEADER_ACCE、strlen (API_SET_HEADER_ACCE)、
    HttpClient_HFIELD_PERSISTENT);
    
    
    strcpy (t_url、HOSTNAME);
    
    RET = HttpClient_connect (httpClientHandle、t_URL、&httpClientSecParams、0);
    
    strcpy (t_BodyMsg_s、get_machine_info);
    RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Get、t_BodyMsg_s、
    空、0、
    0); 



    客户还尝试使用 HttpClient_setHeaderByName。 结果完全相同。

    //使用 HttpClient_setHeaderByName
    
    #define HOSTNAME"https://xxxxxxxxxx.com"
    #define GET_MACHINE_INFO "/pets/1
    #define API_SET_HEADER_AUTH "xxxxxxxxxxxxxxxxxxxxxxxxx"
    #define API_SET_HEADER_UUID "XXXXX"
    #define API_SET_HEADER_ACCE "application/json"
    
    
    void* httpTask (void* pvParameters)
    {
    
    bool MoreDataFlag = false;
    char data[HTTP_MIN_RECV];
    int16_t ret = 0;
    int16_t len = 0;
    
    
    HttpClient_handle httpClientHandle;
    int16_t statusCode;
    
    // https 启用
    HttpClient_extSecParams httpClientSecParams;
    
    httpClientSecParams.privateKey =空;
    httpClientSecParams.clientCert =空;
    httpClientSecParams.RootCA ="test-certification.pem.crt";
    httpClientHandle = HttpClient_create (&statusCode、0);
    
    strcpy (t_url、"x-api-key");
    RET =HttpClient_setHeaderByName (https://ClientHandle、
    HttpClient_HFIELD_REQ_authorization、
    T_URL、
    API_SET_HEADER_AUTH、strlen (API_SET_HEADER_AUTH)、
    HttpClient_HFIELD_PERSISTENT);
    strcpy (t_url、"x-user-uuuid);
    RET =HttpClient_setHeaderByName (https://ClientHandle、
    HttpClient_HFIELD_REQ_authorization、
    T_URL、
    API_SET_HEADER_UUID、strlen (API_SET_HEADER_UUID)、
    HttpClient_HFIELD_PERSISTENT);
    strcpy (t_url、"Accept");
    RET =HttpClient_setHeaderByName (https://ClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    T_URL、
    API_SET_HEADER_ACCE、strlen (API_SET_HEADER_ACCE)、
    HttpClient_HFIELD_PERSISTENT);
    
    
    strcpy (t_url、HOSTNAME);
    RET = HttpClient_connect (httpClientHandle、t_URL、&httpClientSecParams、0);
    
    strcpy (t_BodyMsg_s、get_machine_info);
    RET =HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Get、t_BodyMsg_s、
    空、0、
    0); 



    谢谢、此致、
    Kot

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

    我看不到代码有任何问题、我们知道请求正在发送、因为服务器已确认该请求。 您应该仔细检查标头值、以确保它们正确无误。 还要检查服务器是否有其他要求或限制。 您正在尝试联系哪台服务器?

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

    你好

    我了解这个问题的原因。
        RET = HttpClient_setHeaderByName (https://ClientHandle、
                                 HttpClient_HFIELD_REQ_authorization、
                                 T_URL、
                                 API_SET_HEADER_AUTH、strlen (API_SET_HEADER_AUTH)、
                                 HttpClient_HFIELD_PERSISTENT);

    strlen (API_SET_HEADER_AUTH)
    它更改为

    strlen (API_SET_HEADER_AUTH)+1。

    部分
    > HttpClient_setHeaderByName 函数
    >顺便指定标头名称"name"
    >"标题的名称。 必须为 NULL 终止。"
    我知道有这样的描述、但我不知道有必要在长度中添加 NULL 终止分钟数。
    通过使其成为+1、可以获取 HTTP 响应"200"

    非常感谢。