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.

[参考译文] CC3100BOOST:CC3100Booster Pack + MSP430F5529LP:长 RESTful API 命令字符串有问题? (获取方法)

Guru**** 2392905 points
Other Parts Discussed in Thread: CC3100BOOST, CC3100, CC3100SDK

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/630554/cc3100boost-cc3100booster-pack-msp430f5529lp-trouble-with-long-restful-api-command-strings-get-method

器件型号:CC3100BOOST
Thread 中讨论的其他器件: CC3100CC3100SDK

我一直在使用 MSP430F5529LP 和 CC3100Boost WIFI BoosterPack 进行实验、以开发低功耗物联网设备。 实验平台连接到服务器并成功交换数据。 我使用 RESTful API 进行通信/数据交换、并使用 TLS 实现安全性。 我还使用德州仪器的 simplelink 软件平台进行开发。 我正在使用 Get 方法与服务器通信。 我被卡住的地方是当我执行以下字符串长度超过111个字符的命令时。 (注意:代码片段是为 HTTP_Client 示例修改的)。  str 是字符串变量、带有 RESTful 命令。

strcat (str、str2);
/*设置要发送 HTTP 请求的请求标头字段。 *
HTTPCLI_setRequestFields (https 客户端、字段);
/*发送 GET 方法请求。 *
//此处我们设置 moreFlags = 0,因为

在后续阶段不再需要发送标头字段。 更多
信息、请参阅 HTTP 库 API 文档@ HTTPCLI_sendRequest。
*/
MoreFlags = 0;
RetVal = HTTPCLI_sendRequest (https 客户端、HTTPCLI_METHOD_Get、(const char *) str、moreFlags);
if (RetVal < 0)
{
cli_Write("无法发送 HTTP GET 请求。\n\n");
返回 RetVal;
}


sprintf ((char *) tmpBuf、"%d"、(sizeof (str)-1));

/*
此处、我们设置 lastFlag = 1、因为它是最后一个标头字段。 请参阅
HTTP 库 API 文档@参考 HTTPCLI_sendField 以了解更多信息。
*/

lastFlag = 1;
RetVal = HTTPCLI_sendField (https:客户端、HTTPCli_field_name_content_length、(char *) tmpBuf、lastFlag);
if (RetVal < 0)
{
CLI_Write ("无法发送 HTTP GET 请求标头。\n\n");
返回 RetVal;
}

RetVal = readResponse (httpClient);
//发送获取数据/正文
RetVal = HTTPCli_sendRequestBody (httpClient、(const char *) str、(sizeof (str)-1));
if (RetVal < 0)
{
cli_Write ("未能发送 HTTP GET 请求正文。\n\n");
返回 RetVal;
}

RetVal = readResponse (httpClient);

返回 RetVal; 

如果 str 字符串长度超过111个字符,则作为状态 aboue,执行“HTTPCLI_sendRequest”时,函数将返回和错误代码。  HTTPCli_ESENDBUFSMALL (-107)以下是 有关 HTTPCL_ESENDBUFSMALL 错误的更多详细信息。


/#define HTTPCli_ESENDBUFSMALL (-107)
内部发送缓冲区不够大。
修改 httpcli.c 中的 SEND_BUFLEN 宏、并在需要时重建库。

在 httpcli.c 中的代码片段之后执行

//
#define content_BUFLEN 128
#define URI_BUFLEN 128
#define SEND_BUFLEN 128 #define MAX_FIELD_NAME_LEN
24 

我尝试将 SEND_BUFLEN 更改为256、但仍然遇到错误。 因此、我认为可能有两条前进道路之一

  1. 根据需要更新缓冲器长度
  2. 将日期数据包分成许多128字节组。

如果有人能够分享有关如何推进的想法、请表示感谢。

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

    当您更新 httpcli.c 时、您是否重建了 WebClient 库并确保重建的库版本正确链接到 http_client 示例? 默认情况下、它应链接到库的预构建版本、以便更改可能在应用程序中未生效。

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

    您好 Ben、

    非常感谢您的回答。 您能否启发我重建 Web 客户端库? 下面是 CCS http_client 项目文件夹的快照。

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

    看起来您将库和应用程序合并到一个项目中。 默认情况下、它们在 SDK 中是分开的。 此外、对于命名过程中出现的混淆、我们深表歉意。 在 CC3100 SDK 中、库为 http_lib。

    当您将这两者合并时、您是否从项目属性->编译-> MSP430链接器->文件搜索路径中删除了以下目录路径?
    "${CC3100_SDK_ROOT}/platform/msp430f5529lp/library_project_ccs/http_lib/Debug

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

    您好 Ben、

    感谢您的回答。 是的 、我相信在"Properties"->"Build "->"MSP430 Linker"->"File Search Path"下没有任何对 http_lib 的引用

    下面的附件是文件路径的快照

    此致

    Mahendra

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

    奇怪的是、您在库搜索路径中添加了"C:\ti\cC3100SDK_1.2.0\cC3100-SDK\netapps\http\client"。 很难弄清楚 http 客户端库是如何使用您所做的所有更改构建的。

    您能否尝试使用 SDK 中示例的库存版本并对 SEND_BUFLEN 进行修改以查看它是否可以正常工作? 您是否还可以通过单步执行应用程序来检查、以确保从代码将 HTTP 请求的长度与定义的 SEND_BUFLEN 进行比较的那一个点生成错误?

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

    您好 Ben、

    我想知道 MSP430F5529LP/CC3100上是否存在无法为 Get 方法检索消息正文的问题(HTTP_Client 示例)。 因为 传输编码:未  定义块和 content_length。 因此、读取响应函数中的以下代码不会被执行。

    案例0:/* HTTPCli_field_name_content_length */
    {
    len = strtol ((char *) g_buff、NULL、0);
    } 

    无论如何、我将 SEND_BUFLEN 更改为256并单步执行代码。 此更改将被编译并反映在 sendbuf 字符串上。 下面是一些确认更改的快照。

    注意:我发现在 httpcli.c 文件中的以下函数中使用了 SEND_BUFLEN。

    /*
    === sprsend ====
    *构造 HTTP 请求行以发送
    */
    静态 int sprsend (HTTPCLI_Handle CLI、const char * fmt、...) 



    您还可以在 sprsend()函数中为以下代码行提供一些指示



    /*
    len = xvsnprintf (sendbuf、sendbuflen、fmt、ap);