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.

[参考译文] LAUNCHCC3220MODASF:需要有关在 CC3220MODASF 上实现 HTTPS 功能的指导

Guru**** 2481465 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1356783/launchcc3220modasf-need-guidance-on-implementing-https-functionality-on-cc3220modasf

器件型号:LAUNCHCC3220MODASF

您好!

我在 CC3220MODASF 上使用 HTTPS。 TI SDK 提供了用于测试 HTTP 功能的 HTTP GET 样片。 如何获得 HTTPS 示例代码或在 CC3220MODASF 上启用 HTTPS 功能? 我们的特定需求是在云平台(Azure IoT Blob Storage)上创建文本并附加数据以实现此目标。 我应该执行哪些步骤?

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

    您好!

    请允许我与一位专家联系、他可以提供有关 HTTPS 支持的一些指南。  

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

    您好!
    今天有更新吗?

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

    在 SDK 中、查看 HTTP 客户端文档(请参阅 /docs/ns/html/group__ti__net__http__HTTPClient.html)。

    基本上需要将 TLS 证书(服务器的根 CA 证书和可选的客户端私钥和证书链)编程到 CC32xx 文件系统。 然后填充   HttpClient_extSecParam  根据需要构建  HttpClient_connect() 。  

    您还需要使用"http://www.ti.com.cn/tool/cn/ s //。。" 以触发 HTTPS。

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

    您好!
    我已经根据您的指令修改了我的 HttpClient_connect()函数。


    https://onesensedevicelogs.blob.core.windows.net/devicelogs-2/TestProdDevice2?sv=2020年04月08日 sig =0c1gJUk7OsiVveDmUzr1dyq50IgDClXXXXXXXXXXXXX

    下面是我的 blob SAS URL 和我的配置。

    #定义 HOSTNAME        "">onesensedevicelogs.blob.core.windows.net
    #define Request_URI     "/devicelogs-2/TestProdDevice2?SV= 2020年04月08日 和 se = 2024-11-  
                           22T03%3A51%3A28Z&SR=d&sp=w&SDD=1&JUk7OsiVveDmUzr1dyq50IgDClIBZxxxxxxx" sig

    #define USER_AGENT "HttpClient (ARM;TI-RTOS)"



      HttpClient_extSecParams secParams;

    secParams.RootCA ="----- BEGIN CERTIFICATE----- \r\n"
    "MIIDjjCCAnagAwIBAGIQAzrx5qcRqaC7KGSxHQn65TANBGkqhkiG9w0BAQsFADBh\r\n "
    "MQswCQYDVQGEwJVUZEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n "
    "D3cuZGlnaWNlcnQuY29tMSAwHgYDVQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\r\n "
    "MjAeFw0xMzA4MDExMjAwMDBAFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTALVT\r\n "
    "MRUwEwYDVQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3d5kaWdpY2VydC5j\r\n "
    "B20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIJANBgkqhkiG\r\n"
    "9w0BAQEFAAOCAQ8AMIIBCgKCAQEauzfNNNx7a8myaJCTSnX/RrohCgiN9RlUyfui\r\n "
    "2/OU8jqJkTx65qsGGmvPrC3oXgkRLpimn7Wo6h+4FR1IAWsULecYxsMNzaHxmx\r\n "
    "1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtszpLYl6ZtrAGCSYP9PIUK-Y92eQ\r\n "
    "q2EGnI/yuum06ZIya7XzV+hdG82MHaUVBJ8zUtluNJbd134/tJS7SVQepj5Wz\r\n "
    "tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\r\n"
    "vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9F2KZJobq7nMWxM4MphQIDAQABO0IwQDAP\r\n "
    "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQuTiJUIBiV\r\n"
    "5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\r\n "
    "1Yl9PMWLSn/pvtsrf9+wX3N3KjITOYFnQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\r\n "
    "NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\r\n "
    "Fdtom/DZMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\r\n"
    "8rGOmaFvE7FBcf6IKshPECBV1/MUREXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\r\n "
    "pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\r\n "
    "MRY=\r\n"
    "---- END CERTIFICATE----- \r\n";

     HttpClient_CONNECT (httpClientHandle、HOSTNAME、&secParams、0);

    请确认我的配置是否准确。




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

    您好!
    今天有更新吗?

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

    主机名应以"https://"开头。

    secParams.RootCA -应为 完整路径  至 根 CA 文件 (在 CC32xx 文件系统中)  而不是实际的证书内容。

    如果仍有错误-请发送  HttpClient_connect 的返回代码。

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

    您好!

    我已经将主机名更改为以"https://"开头,但我无法将主机名粘贴到这里"https://"

    我使用 sl_FsOpen 和 sl_FsWrite 函数将根证书"DigiCertGlobalRootG2.crt.pem"更新为名称"/cert/ms.pem "、然后使用"sl_FsGetInfo"函数检索文件信息来对其进行验证。 之后、我将 secParams.RootCA 设置为/cert/ms.pem。 但是、当尝试调用 HttpClient_connect 时、我的代码没有响应。


    请在下面找到我的代码片段。

    #define HOSTNAME"">onesensedevicelogs.blob.core.windows.net
    #define Request_URI "/devicelogs-2/TestProdDevice2?SV= 2020年04月08日&se=2024-11-       
    sig =0c1gJJUk7OsiVveDmUzr1dyq50IgDClIBZ%2BYnja6TVk%3d "
    #define USER_AGENT        "application/json"

    const char certificates []="----- BEGIN CERTIFICATE----- \r\n"
    "MiiddzCCAl+gAwIBAgaautabkgkqhkiG9w0BAQUFADBaMQswCQYDVQGEwJJJ\r\n "
    "RESMBAGA1UEChMJQmFsdGltb3JlMRMWEQYDVQLEwpDeWJlRydXN0MSIwIAYD\r\n "
    "VQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\r\n "
    "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UBhMCKUxEjAQBgNVBAoTCUJhbHRpbW9y\r\n "
    "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\r\n "
    "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAGOCggEBAKMEyKr\r\n "
    "mD1X6CZymrV51Cni4eiVgLGW41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\r\n "
    "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\r\n "
    "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\r\n "
    "XMD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\r\n "
    "dc93UC3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/y\r\n"
    "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\r\n "
    "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\r\n "
    "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27CyclohAO992T9Ldcw46QF+vaKSm2eT92\r\n "
    "9hkTI7gQCBLYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\r\n "
    "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACTPhSNzkE1akxehi/oCr0\r\n "
    "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\r\n"
    "ksLi4xaNmjICq44Y3ekQE5+NaQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBSDtTLS\r\n "
    "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\r\n"
    "---- END CERTIFICATE----- \r\n";

     FlashFile ("/cert/ms.pem "、(const uint8_t*) certificates、strlen (certificates));
    sl_FsGetInfo ("/cert/ms.pem "、0、&fsFileInfo);
      secParams.RootCA ="/cert/ms.pem ";


    httpClientHandle = HttpClient_create (&statusCode、0);

    HttpClient_setHeader (httpClientHandle、HttpClient_HFIELD_REQ_content_type、user_agent、strlen (user_agent)+1、HttpClient_HFIELD_persistent);

     HttpClient_CONNECT (httpClientHandle、HOSTNAME、&secParams、0);

    HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Put、Request_URI
    车体、bodyLen、
    0);



    控制台输出:

    正在连接:Airtel_Airtel_Inthings_ 2.

    [NetApp EVENT] IP Acquired:IP=192.168.1.31,Gateway=192.168.1.1

    将文件/cert/ms.pem 成功写入闪存
    文件信息...


    旗帜:8752

    长度:1282

    MAXSIZE:3656

    令牌:0 0 0 0

    存储大小:8192

    写入计数器:7

    发送 HTTP 请求主机名 onesensedevicelogs.blob.core.windows.net



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

    您是否已将认证作为安全文件?  尝试使其不安全(至少在测试时)。

    尝试暂停 CPU 并检查代码卡滞的位置。  

    我不熟悉 HttpClient_connect—因此可能存在堆栈问题(尝试增加线程的堆栈大小(如果您使用的是原始的 HTTPGET 示例-请检查 "platform.c"中的 task_stack_size)。

    如果这不起作用、您可以尝试进入  HttpClient_connect 以查找故障点。

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

    您好!
     根据您的说明、我修改了以下代码部分、

    1) 1)将 HTTP_Task 的栈大小从2048增加到4096 >>> #define task_stack_size             (4096)
    2) 2)证书制作为不安全文件 >>从 SL_FS_CREATE_SECURE 到 SL_FS_CREATE_FAILSAFE    

     sl_FsOpen ((unsigned char *) path、
    SL_FS_CREATE | SL_FS_CREATE_FAILSAFE | SL_FS_CREATE_NOSIGNATURE
    | SL_FS_CREATE_PUBLIC_WRITE | SL_FS_OVERWRITE
    | SL_FS_CREATE_MAX_SIZE (len)、NULL);

    但使用 HttpClient_connect 函数时的代码  

    控制台日志:

    正在连接:Airtel_Airtel_Inthings_ 2.

    [NetApp EVENT] IP Acquired:IP=192.168.1.19,Gateway=192.168.1.1

    将文件/cert/ms.pem 成功写入闪存
    文件信息...


    旗帜:8704

    长度:1282

    MAXSIZE:3656

    令牌:0 0 0 0

    存储大小:8192

    写入计数器:1

    发送 HTTP 请求主机名 onesensedevicelogs.blob.core.windows.net


    在代码无响应的情况下暂停 CPU:


    使用步入操作确定了 HttpClient_connect 的故障点:




    无 &secParams 控制台日志的 Httpclientconnect:(HttpClientHandle、HOSTNAME、0、0);

    正在连接:Airtel_Airtel_Inthings_ 2.

    [NetApp EVENT] IP Acquired:IP=192.168.1.19,Gateway=192.168.1.1

    将文件/cert/ms.pem 成功写入闪存
    文件信息...


    旗帜:8704

    长度:1282

    MAXSIZE:3656

    令牌:0 0 0 0

    存储大小:8192

    写入计数器:4

    发送 HTTP 请求主机名 onesensedevicelogs.blob.core.windows.net

    错误! 代码=-2006、说明= httpTask:连接失败

     

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

    那么、如果我理解正确、你跑了两次、得到了两个不同的问题、对吗?

    崩溃(异常处理程序)可能意味着某种内存问题。 如果它与堆栈无关-请准确检查 http 过程中发生崩溃的位置。

    2006表示 INVALID_INPUT -请检查 被调用的 SL API (可能是 sl_Connect)、并验证提供的参数是否正确。

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

    您好!
    是的、回答正确。 我执行了两次代码、使用和不使用&secParams 都是如此。 当使用&secParams 时 Httpconnect 出现卡滞时、您提到了这不是堆栈内存问题。 如何识别任何其他内存问题? 是否可以对 http_client.c 源文件进行修改? 是否有之前的任何主题可用于在 CC3220MODASF 上引用 HTTPS?

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

    您好!

    今天是否有更新?

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

    您好!

    请观看本视频

    您从调试器获取的图像未显示任何有用信息。 您只知道您的代码属于错误处理程序。 您应该使用调用堆栈来确定此故障的来源。

    如果您对与 https://TI http 库相关的其他主题感兴趣、可以在 e2e 论坛中使用搜索功能。

    1月

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

    您好!

    我通过将私钥和客户端证书设置为 NULL 而不是让它们保持未声明状态来解决代码崩溃问题。 以下是修改后的安全参数。

    secParams.RootCA ="/cert/ms.pem ";
    secParams.privateKey = NULL;
    secParams.clientCert = NULL;
    HttpClient_CONNECT (httpClientHandle、HOSTNAME、&secParams、0);


    当前在尝试使用 HttpClient_sendRequest 进行连接时遇到400个错误。


    #define Request_URI       "/devicelogs-2/TestProdDevice2?SV= 2020年04月08日 sig =0c1gJJUk7OsiVveDmBYr1dyq50IgDClIBZ%2Uznja6TXXXX"

    const char *body ="hello world";
    uint32_t bodyLen = strlen (body);
    RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Put、Request_URI
    车体、bodyLen、
    0);


    控制台输出:

    正在连接:Airtel_Airtel_Inthings_ 2.

    [NetApp EVENT] IP Acquired:IP=192.168.1.35,Gateway=192.168.1.1

    将文件/cert/ms.pem 成功写入闪存
    文件信息...


    旗帜:8704

    长度:1294

    MAXSIZE:3656

    令牌:0 0 0 0

    存储大小:8192

    写入计数器:35

    发送 HTTP 请求主机名 onesensedevicelogs.blob.core.windows.net

    错误! 代码= 400、说明= httpTask:无法获取状态

     

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

    您好!

    HTTP 代码400请求错误。 您应该检查您的服务器为何返回此代码。

    1月

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

    您好!

    我认为我们的服务器上的标头设置存在问题;它需要以下标头。

    Put /devicelogs-2/TestProdDevice2?SV= 2020年04月08日 sig =0c1gJJUk7OsiVveDmUzr1dq50IgDXXXX HTTP/1.1
    主机:onesensetestdevicelogs.blob.core.windows.net
    x-ms-blob-type:AppendBlb
    Content-Type:text/plain;charset=UTF-8
    内容长度:0


    但我只能设置后面的标头。 我可以设置自定义标头请求吗?


    RET = HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_HOST、
    " onesensetestdevicelogs.blob.core.windows.net "、
    strlen (" onesensetestdevicelogs.blob.core.windows.net ")、
    HttpClient_HFIELD_persistent);

    RET = HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    "text/plain;charset=UTF-8、
    strlen ("text/plain;charset=UTF-8 ")、
    HttpClient_HFIELD_persistent);

    控制台日志:

    错误! 代码=-3019、说明= httpTask:连接失败

    我想设置 x-ms-blob-type:AppendBlob 和 Content-Length:0。 如何实现?

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

    您好!

    很抱歉、但我不确定。 但是 http 库在源代码上可用。 如果需要、任何命令都不会阻止您修改库。

    错误代码-3019的含义为 HttpClient_EHSTHEADERALREADYEXIST /* Host 标头已存在,多个 Host 标头无效。 删除现有的主机标头。*/

    1月

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

    您好!

    我可以使用多个接头吗?

    http_client.h

    #define HttpClient_MAX_NUMBER_OF_HEADER_Fields       (46)

    接头的最大数量是否为46? 为什么在多个主机头无效时出现诸如"Host header already exists"之类的错误?

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

    您好!

    是的、您可以设置多个标题。 但只有一个主机头。

    因为您要设置多个主机标头。 请参见 httpdclient.c 内的 sendRequest 函数()

    1月

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

    您好!

    我修改了主机标头并添加了2个自定义标头、因为在 httpclient.h 库中找不到预定义的标头类型。 是否可以如下文所述对其进行定义? 如果不是、请建议以其他方式添加自定义标头类型。 我需要包含内容长度和 blob 类型。

    #define HttpClient_HFIELD_REQ_CUSTOM_X_MS_BLOB_TYPE (1001 | HttpClient_Request_Header_MASK)
    #define HttpClient_HFIELD_REQ_CUSTOM_内容 长度(1002 | HttpClient_Request_Header_MASK)

    #define content_type "Content-Type: text/plain; charset=UTF-8 "
    #define blob_type "x-ms-blob-type:AppendBlub"
    #define content_length "内容长度:0"


    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_CUSTOM_X_MS_BLOB_TYPE、
    Blob_type、
    strlen (blob_type)+ 1、
    HttpClient_HFIELD_persistent);

    //设置内容类型标题
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    内容类型、
    strlen (content_type)+ 1、
    HttpClient_HFIELD_persistent);

    //设置内容长度标头
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_CUSTOM_content_length、
    内容长度、
    strlen (content_length)+ 1、
    HttpClient_HFIELD_persistent);


    控制台输出:
    错误! 代码= 411、说明= httpTask:无法获取状态



    我可以为 HTTP 请求添加更多数据样本、以使用 REST API 将块附加到 Azure Blob Storage 中的 blob。

    请求语法:
    Put myaccount.blob.core.windows.net/.../myblob HTTP/1.1

    请求标头:
    x-ms-版本:2018年11月09日
    x-ms-date:
    x-ms-copy-source: myaccount.blob.core.windows.net/.../myblob
    X-ms-源范围:字节=0-65535
    X-ms-blob-condition-appendpos:2097152
    x-ms-blob-condition-maxsize:4194304
    授权:SharedKey MyAccount:J4ma1VuFnlJ7yfk/Gu1GxzbfdJloYmBPWlfhZ/xn7GI=
    内容长度:0
    if-match:"0x8CB172A360EC34B"


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

    您可以使用以下命令添加自定义标头、而无需更改 httpclient 堆栈:

    /*!
        \brief  Setting HTTP Client Header-field configurations by header name.
                Both standard (as defined by the HTTP RFC spec) and non-standard
                header names are supported.
                This API supports request and response headers.
    
                When a given standard HTTP header is set, it is important to
                consistently set it using one of HTTPClient_setHeaderByName() or
                HTTPClient_setHeader(). The ordering of the values may not be
                preserved if both APIs are used to set the same header.
    
        \param[in]     client   Instance of an HTTP client
    
        \param[in]     option   Options for setting could be one of the following:
                                #HTTPClient_REQUEST_HEADER_MASK - sets a header-field which will be used in requests.
                                #HTTPClient_CUSTOM_RESPONSE_HEADER  - sets a header-field which will be used when HTTP response retrieve. This option need to be used when
                                the user want to store custom response header by name.
        \param[in]     name     Name of header. Must be NULL-terminated.
    
        \param[in]     value    On request - Value for setting could be any related value for
                                the corresponding header.
                                On response - Must be NULL.
    
        \param[in]     len      On request - Length of the value.
                                On response - Must be 0.
    
        \param[in]     flags    On request - Flags for settings need be one of the following:
                                           - #HTTPClient_HFIELD_NOT_PERSISTENT - Header-Field is not persistent.
                                           - #HTTPClient_HFIELD_PERSISTENT - Header-Field is persistent.
                                On response - Flags should be 0.
                                              Currently, HTTP custom response header only supports persistent mode.
                                              No option right now, to set a custom response header for single request and clear it after the first response,
                                              not by sign it as non-persistent and not by clear it after one use.
                                              For clear custom response header after set only close the HTTPClient connection by "HTTPClient_destroy",
                                              and open a new one.
    
        \return 0 on success or error code on failure.
     */
    int16_t HTTPClient_setHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t len, uint32_t flags);
    

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

    您好!

    感谢您的宝贵支持。 现在、我可以在 blob 中创建文本文件。 但是、当我尝试将一些文本数据附加到创建的文本文件时、会出现以下错误:

    控制台输出:

    HTTP 响应状态代码:400

    InvalidHeaderValue 其中一个 HTTP 头的值格式不正确。
    请求 ID:e6flu397-f01e-0096-19cd-a5b644000000
    时间:2024-05-14T07:10:17.7055843Z 内容长度 11

    接收到322字节的有效载荷



    我的代码片段:

    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_Accept;

    "主机:onesensetestdevicelogs.blob.core.windows.net\n"
    "x-ms-blob-type:AppendBlb\n"
    "content-Type: text/plain;charset=UTF-8 (内容类型:文本/纯文本;字符集=UTF-8)\n"
    "内容长度:11\n\n"、
    strlen(
    "主机:onesensetestdevicelogs.blob.core.windows.net\n"
    "x-ms-blob-type:AppendBlb\n"
    "content-Type: text/plain;charset=UTF-8 (内容类型:文本/纯文本;字符集=UTF-8)\n"
    "内容长度:11\n\n")+ 1、
    HttpClient_HFIELD_persistent);

    RET = HttpClient_CONNECT (httpClientHandle、HOSTNAME、&secParams、0);
    // secParams (&S)
    if (ret < 0)
    {
    printError ("httpTask: connect failed"、ret);


    RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Put、Request_URI
    "Hello world"、strlen ("Hello world ")、0);


    内容长度和封装尺寸是否相同?

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

    内容长度是封装尺寸。 它会自动添加。

    为什么不为标准头(例如  Content-Type )使用标准 setHeader(), 为 不受支持的头使用 HttpClient_setHeaderByName() ?

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

    您好!

    感谢您的宝贵支持。

    我已经使用 HttpClient_setHeaderByName()修改了标题设置。 现在、我可以创建一个日志文件并附加到我的 Azure Blob Storage。