工具/软件:Code Composer Studio
尊敬的先生:
我正在处理 HTTP 客户端代码、必须连接第三方云设备才能使用 HTTP 获取密码令牌。 在这里、我使用的是 TI CC3220 SDK V3_40_00_5、但我在-2006中遇到错误
请务必仔细阅读。
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.
工具/软件:Code Composer Studio
尊敬的先生:
我正在处理 HTTP 客户端代码、必须连接第三方云设备才能使用 HTTP 获取密码令牌。 在这里、我使用的是 TI CC3220 SDK V3_40_00_5、但我在-2006中遇到错误
请务必仔细阅读。
尊敬的先生:
我尝试过 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
尊敬的先生:
我在 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、现在它可以正常运行。
谢谢