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.

[参考译文] CCS/CC3220SF-LAUNCHXL:HTTP 连接与-2006失败

Guru**** 2581345 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/930344/ccs-cc3220sf-launchxl-http-connection-failed-with--2006

器件型号:CC3220SF-LAUNCHXL

工具/软件:Code Composer Studio

尊敬的先生:

我正在处理 HTTP 客户端代码、必须连接第三方云设备才能使用 HTTP 获取密码令牌。 在这里、我使用的是 TI CC3220 SDK V3_40_00_5、但我在-2006中遇到错误  

请务必仔细阅读。

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

    您好!

    您尝试连接到哪个 HTTP 站点? 如果您尝试 google.com 或具有简单 Get 请求的另一个公共站点、您是否从 HTTP 库获得正确的输出?

    此致、

    Michael

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

    尊敬的先生:

    我尝试过 POST 方法的第三方 URL,但我无法连接到该 URL,但当我尝试使用 localhost 时,我已连接,但在 POST URL 中添加了一些垃圾字符  

    请检查我的代码

    int get_token_fin_http_server (MQTTPassword_ts * MQTTPassword)

    int RetVal =-1;

    bool MoreDataFlag = false;

    char httpBody[200]={0};

    //http 处理程序
    HttpClient_handle httpClientHandle;

    int16_t statusCode;

    httpClientHandle = HttpClient_create (&statusCode、NULL);

    if (httpClientHandle < 0)

    ASSERT_ON_ERROR (statusCode、"HttpClient_create () failed");

    uint32_t len = 0;


    字符 httpHeader[100]={0};

    memset ((char*)&httpHeader、0x00、sizeof (httpHeader));

    strcpy (httpHeader、" application/json");

    len = strlen ((const char*) httpHeader);

    RetVal = HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、https://fet、len、
    HttpClient_HFIELD_PERSISTENT);

    memset ((char*)&httpHeader、0x00、sizeof (httpHeader));

    strcpy (httpHeader、"HttpClient (ARM;TI-RTOS)");

    len = strlen ((const char*) httpHeader);

    RetVal |= HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_USER_AGENT、httpHeader、len、
    HttpClient_HFIELD_PERSISTENT);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_setHeader () failed");

    char localHostName[40]={0};

    strcpy (localHostName、HOSTNAME);


    WMLogInfo (info_log、"host name %s"、localHostName);

    RetVal = HttpClient_connect (httpClientHandle、localHostName、0、0);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_connect() failed");

    其他

    WMLogInfo (info_log、"HTTP 已连接%s "、localHostName);

    strcpy (https://Body、"{n \"gatewayPassword\":\"w$YKudSRX \"、\n \"gatewayUserName\":205\n");

    len = strlen ((const char *) httpBody);

    WMLogInfo (INFO_log、"http 主体%s、len %d、httpBody、len);

    RetVal = HttpClient_sendRequest (https://ClientHandle、HTTP_METHOD_POST、POST_Request_URI、https://Body、
    Len、0);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_sendRequest() failed");

    if (RetVal!= HTTP_SC_OK)

    ASSERT_ON_ERROR (statusCode、"HTTP_SC_OK Failed");

    //清除缓冲区

    memset ((char*)&httpData、0x00、sizeof (httpData));

    Len = 0;

    操作

    RetVal = HttpClient_readResponseBody (httpClientHandle、httpData、sizeof (httpData)、
    MoreDataFlag (&M);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_readResponseBody () failed");

    Len +=返回值;

    } while (MoreDataFlag);

    RetVal = HttpClient_ddisconnect (httpClientHandle);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_ddisconnect() failed");

    RetVal = HttpClient_Destroy (httpClientHandle);

    如果(RetVal < 0)

    ASSERT_ON_ERROR (RetVal、"HttpClient_Destroy () failed");

    memset ((char*)&finalString、0x00、sizeof (finalString));

    strcpy (finalString、"{\"");

    strcat (finalString、(char*)&httpData[2]);

    返回 gatewayLoginparser (MQTTPassword、(const char*) finalString);

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

    您好!

    查看您发布的另一个线程、问题似乎是由于 HTTP 缓冲区大小不足:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/935408

    请告诉我、这是否解决了您的问题、或者您对 HTTP 库的使用还有其他问题。

    此致、

    Michael

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

    尊敬的先生:

    我更改了库、现在可以连接任何 URL。

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

    尊敬的先生:

    我在 HTTP 库函数中进行了一些更改、使用最新的 SDK 时我无法连接、但 SDKV2_40我能够连接、因此这是最新 SDK 的问题。

    在这里、使用最新的 SDK HTTP 库时、我根据头文件中的@SlNetSock_secAttribSet 说明添加了+1和 Len。

    if (域!= NULL)

    RET = SlNetSock_secAttribSet (secAttribHdl、SLNETSOCK_SEC_ATTRIB_DOMAIN_NAME、(char *) domain、strlen (domain)+ 1);
    如果(RET < 0)

    show_error (ret、"SlNetSock_secAttribSet () failed");
    转至错误;

    在@startSecureMode 函数中更改上述内容后, 器件开始使用 URL 连接、但在@HttpClient_setHeader 函数中存在另一个错误。在这里、我有两个不同的连接 URL、反之亦然、这意味着如果正在处理第一个 URL 流、它将正确连接、并且它将读取响应、但之后 第一个流程第二个 URL 将连接、但在设置标头时附加了一些垃圾字符、因此该流程反之亦然、因此我在@HttpClient_setHeader 函数中进行了一些更改。 请看一下、

    /*分配请求标头节点*/
    节点=(REQ_HField *) malloc (sizeof (REQ_HField));
    if (节点!= NULL)

    节点->CustomName = NULL;
    node->value =(char *) malloc (len);
    if (node->value == NULL)

    FREE (节点);
    return (HttpClient_EREQUESTHEADERALLOCFAILED);

    /*填写请求名称和值*/
    node->Name =选项;
    // memcpy(((char*) node->value,(const char*) value,len);
    sprintf (node->value、"%s"、(const char*) value);

    这里的库使用 memcpy 来复制用户头、但它正在附加垃圾、因此我更改为 sprinf、现在它可以正常运行。

    谢谢