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.

[参考译文] RTOS/EK-TM4C129EXL:TI-RTOS HTTPS POST 示例

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/812332/rtos-ek-tm4c129exl-ti-rtos-https-post-sample

器件型号:EK-TM4C129EXL

工具/软件: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、&params);
    如果(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