您好!
我在 CC3220MODASF 上使用 HTTPS。 TI SDK 提供了用于测试 HTTP 功能的 HTTP GET 样片。 如何获得 HTTPS 示例代码或在 CC3220MODASF 上启用 HTTPS 功能? 我们的特定需求是在云平台(Azure IoT Blob Storage)上创建文本并附加数据以实现此目标。 我应该执行哪些步骤?
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.
您好!
我在 CC3220MODASF 上使用 HTTPS。 TI SDK 提供了用于测试 HTTP 功能的 HTTP GET 样片。 如何获得 HTTPS 示例代码或在 CC3220MODASF 上启用 HTTPS 功能? 我们的特定需求是在云平台(Azure IoT Blob Storage)上创建文本并附加数据以实现此目标。 我应该执行哪些步骤?
在 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://"开头,但我无法将主机名粘贴到这里"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:连接失败
您好!
我通过将私钥和客户端证书设置为 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:无法获取状态
您好!
我认为我们的服务器上的标头设置存在问题;它需要以下标头。
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。 如何实现?
您好!
我修改了主机标头并添加了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);
内容长度和封装尺寸是否相同?