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.
工具/软件:TI-RTOS
您好!
我正在研究 TI_RTOS 示例、我已经实现了 HTTPS GET 示例、我正在尝试实现 HTTPS POST。
是否有 HTTPS POST 的示例? 如果不是、将其设置为 HTTPS 发布的步骤是什么?
还有一个用于 HTTPS POST 的示例测试服务器、我可以通过它测试我的代码吗?
我对代码进行了一些更改、但收到发送失败错误。
此致、
Deepak
Deepak、您好!
这是您用于发布帖子的代码:
//发出 HTTP 1.1 POST 请求 // 将请求发送到服务器: // // POST /index.html HTTP/1.1 HTTPCli_sendRequest (&CLI、HTTPStd_POST、"/index.html"、true); //发送其他字段(可选) // 内容长度: // HTTPCL_sendField (&CLI、HTTPStd_field_name_content_length、len、true); //发送请求正文 // HTTPCLI_sendRequestBody (&CLI、data、strlen (data));
您可以使用此服务器进行测试:
https://docs.postman-echo.com/?version=latest#1eb1cf9d-2be7-4060-f554-73cd13940174
希望这有所帮助、
Gerardo
您好 Gerardo、
正如您所说、我已经修改了代码、并已从"Microsoft <a href="">">https://postman-echo.com""> sedats://postman-echo.com"获取了证书 、但我收到了发送失败错误。
这里是我已经执行的代码
#defineHOSTNAME"https://postman-echo.com"
#define REQUEST_URI "/"
#define content_type "application/json"
#define Authorization (定义授权)"基本"
#define USER_AGENT "HTTPCli (ARM;TI-RTOS)"
空 https://PostTask (UArg0、UArgarg1)
{
bool MoreFlag = false;
字符数据[64];
内转台;
int len;
char content_length[3];
struct sockaddr_in addr;
TLS_PARAMS tlsParams;
TLS_Handle TLS;
//要发送的数据
strcpy (data、"{\"val\":10}");
len = strlen (data);
sprintf (content_length、"%d"、len);
System_printf ("\n 数据:%s\n"、数据);
system_printf ("len (int):%d\n"、len);
System_printf ("content_length:%s\n"、content_length);
HTTPCLI_PARAMS 参数;
HTTPCLI_StructCLI;
HTTPCli_Field field[5]={
{ HTTPStd_field_name_host、HOSTNAME}、
{ HTTPStd_field_name_authorization,Authorization },
{HTTPStd_field_name_content_type、content_type}、
{ NULL,NULL }
};
startntp();
System_printf ("向'%s'发送 HTTPS GET 请求\n"、HOSTNAME");
system_flush();
TLS_PARAMS_INIT (&tlsParams);
tlsParams.ca = ca;
tlsParams.calen = calen;
TLS = TLS_create (TLS_METHOD_CLIENT_TLSv1_2、&tlsParams、NULL);
如果(!TLS){
printError ("https://task: TLS create failed"、-1);
}
GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_2、0);
GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_3、GPIO_PIN_3);
HTTPCLI_construct(&CLI);
HTTPCLI_setRequestFields(&CLI);
RET = HTTPCli_initSockAddr ((struct sockaddr *)&addr、HOSTNAME、0);
如果(ret < 0){
printError ("https:任务:地址解析失败"、ret);
}
HTTPCLI_PARAMS_INIT (params);
params.TLS = TLS;
RET = HTTPCLI_CONNECT (&CLI、(struct sockaddr *)&addr、0、¶ms);
如果(ret < 0){
printError ("https://task: connect failed"、ret);
}
RET = HTTPCLI_sendRequest (&CLI、HTTPStd_POST、Request_URI、true);
如果(ret < 0){
printError ("https://task:send failed"、ret);
}
其他
{
system_printf ("sendRequest successful\n");
}
RET = HTTPCLI_sendField (&CLI、HTTPStd_field_name_content_length、content_length、false);
RET = HTTPCLI_sendField (&CLI、HTTPStd_field_name_content_type、content_type、true);
如果(ret < 0){
printError ("httpTask: send failed"、ret);
}
否则{
System_printf ("sendField Successful \n");
}
RET = HTTPCLI_sendRequestBody (&CLI、data、strlen (data));
如果(ret < 0){
printError ("httpTask:无法发送变量数据"、ret);
}
否则{
System_printf ("成功发送数据");
}
RET = HTTPCLI_getResponseStatus (&CLI);
if (ret!= HTTPStd_OK){
printError ("https://Task: Cannot get status"、ret);
}
System_printf ("HTTP 响应状态代码:%d\n"、ret);
RET = HTTPCli_getResponseField (&CLI、data、sizeof (data)、&moreFlag);
if (ret!= HTTPCLI_FIELD_ID_END){
printError ("https:任务:响应字段处理失败"、ret);
}
Len = 0;
执行{
RET = HTTPCli_readResponseBody (&CLI、data、sizeof (data)、&moreFlag);
如果(ret < 0){
printError ("https:任务:响应正文处理失败"、ret);
}
len += ret;
} while (moreFlag);
system_printf ("接收到的有效载荷%d 字节\n"、len);
system_flush();
HTTPCLI_DISCONNECT (&CLI);
HTTPCL_析 构(&CLI);
TLS_DELETE (&TLS);
}
我是否需要进行其他更改才能使其正常工作?
此致、
Deepak
Deepak、您好!
尝试通过修改以下内容发布到/POST URI
#define REQUEST_URI "/发布"
如果这仍然不起作用、您可以告诉我哪些 HTTPCli 调用不起作用、以及它的返回状态是什么?
BR、
Gerardo
您好 Gerardo、
我是这样做的。 仍然是相同的结果。 我的 HTTPS GET 代码也不起作用、这让我感觉自己是证书问题。 如果您有的话,您可以向我发送 postman 的根证书吗?
此致、
Deepak
Deepak、您好!
将您的证书更新为此处找到的证书:
https://www.amazontrust.com/repository/AmazonRootCA1.pem
谢谢、
Gerardo
您好 Gerardo、
此证书给 了我相同的错误、但我使用从浏览器的证书路径获取的另一个证书使其正常工作。
导航到根证书将为您提供有效的证书
---- 开始证书--
MIIEDzCCAvegAwIBAADANBgqhkiG9w0BAQUFADBoMQswCQYDVQGEwJVUZE
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyeMDAGA1UECxMp
U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbibBBdXRob3JpdHkwHhcNMDQw
NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQGEwJVALUE UzElMCMGA1Uz
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyeMDAGA1UECxMpU3RhcmZp
ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbibBBdXRob3JpdHkwEgggMA0GCSqGSIb3.
DQEBAQUAA4IBDQAwggEIAOIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KHY/e97gKvDIr1MvnsoFAZMej2YcOadN
+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqsho9T5iaU0
X9tDkYI22WY8sbi5gv2cOj4QyDvBmVmesZGD3/cVE8MC5fvj13c7JdBmzDI1aa
K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAggre4HFMIOMB0G
A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHBS/X7fR
zt0fhvRbVazc1xDCDqmI56FspGowaDELMAk1UEMBHMCVVMxJTAGNVBAoTHFN0
YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluY4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJktv3
L7IezMdeatiDh6GX70k1PncGQVhiv45YUApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
xy16paq8U4Zt3VekyvggQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSWE9atvNziPTnvT51cKEY
WQPJIrSPnNVeKtelttQKbfi3QBFGMh95DmK/D5fs4C8fF5Q=
---- 结束证书--
感谢你的帮助。
我仍然有疑问、在 TI-RTOS 示例中是否可以从网站自动下载证书? 现在、我们将其复制并粘贴到代码中。 我正在处理将发布的产品、如果更改了证书、则会给我带来问题。 因此、我希望实现根证书流程的自动化
此致、
Deepak
Deepak、您好!
不需要、必须在器件上对所需的证书进行编程。
BR、
Gerardo