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/CC3200-LAUNCHXL:cc3200 SDK v1.3.0中 http 客户端示例的 HTTP Post 问题

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/616069/ccs-cc3200-launchxl-problems-with-http-post-with-the-http-client-example-in-cc3200-sdk-v1-3-0

器件型号:CC3200-LAUNCHXL
Thread 中讨论的其他器件:CC3200

工具/软件:Code Composer Studio

您好!

我将 cc3200 SDK 1.3.0和 CCS v7与 cc3200launchXL 搭配使用、以进行原型设计。 该示例开箱即用、但现在我正在尝试在 库的帮助下创建动态 json 数据。 我已测试了从该库生成的 json 字符串、并使用 cURL 进行了 http 发布、但它工作正常。 问题是、当我使用从其 API 生成的字符串(经 json 验证)时、http POST 不起作用、并且在终端上、我只看到 HTTP Post 开始和 HTTP Post 结束。在 HTTP 服务器上、未接收到任何数据、 我在终端上完全没有错误日志。 这会使调试问题变得困难。 如果任何人已经知道代码流、则会感谢指向错误的任何指针。 下面是我使用的代码:

int main(){...



size_t buff _size = build_packet ((float) i);

lRetVal = HTTPPostMethod (&httpClient、g_cpOutputBuffer、buff 大小);

...

}



static size_t build_packet (float value)
{

json_value * root_value = json_value_init_object ();
json_Object * root_object = json_value_get_object (root_value);
size_t bytes;
char *串行化字符串= NULL;
json_object_set_string (root_object、"name"
、"absin_object "、"json_set"、"json"、"absin_object) "volte"、value);

bytes = json_serialize_size_t_gy (root_value);
g_cpOutputBuffer =(char*) malloc (bytes);//g_cpOutputBuffer 是全局静态 char 指针

serialized_string = json_serialized_to_string_ral化为(root_value);strcp_palized_string


(g_free_signalized);

返回字节;
}

静态 int HTTPPostMethod (HTTPCLI_Handle httpClient、char *数据、size_t length){

...

sprintf ((char *) tmpBuf、"%d"、length);

... //其余 代码没有修改

lRetVal = HTTPCLI_sendRequestBody (httpClient、data、length);

...

}

以下是我获得的日志:

(一
CC3200 HTTP 客户端应用
(一



主机驱动程序版本:1.0.1.11
内部版本2.9.0.31.1.4.1.0.1.1.3.0.3.37
器件配置为默认状态
器件作为工作站启动
[WLAN 事件] STA 连接到 AP:--- ,BSSID:---:---:---:---
[NetApp 事件]获得的 IP:IP=--- ,网关--------------------------------------------------------
连接到 AP:---
连接到服务器已成功创建
HTTP POST 开始
:HTTP POST 结束:

HTTP GET 开始:
HTTP 状态200
内容类型:application/json
成功解析7个 JSON 令牌
HTTP GET 结束:

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

    如果没有进一步的详细信息、很难知道您的项目可能会发生什么可能导致问题。

    您可以检查的一件事是您是否已将所有所需的标题包含在您的 POST 请求中。 使用 cURL,将其设置为 verbose 模式(-v),以便您可以查看它发送到服务器的 HTTP 标头。 您应该会看到如下内容:
    "发布/myservice HTTP/1.1
    主机:
    用户代理:c卷 曲/7.54.0"
    等等
    如果您看到一些您认为需要的标志,则必须使用 HTTPCLI_sendField() API 将其发送到服务器,然后再使用 HTTPCLI_sendRequestBody()。 确保只在最终的 HTTP 标头字段上设置 lastFlag = 1。

    另一件可能的事情是、您得到的 HTTP 响应不是 HTTP 200或 HTTP 404。 在演示中,readResponse()函数仅处理状态为200和状态为404的 HTTP 响应。 也许您正在从服务器获得一些其他状态,在这种情况下,readResponse()调用 flushHTTPResponse()并丢弃数据。 检查卷曲打印件并查看从服务器返回的状态。 您还可以在 readResponse()中放置一个断点,以查看返回的内容。 如果从处理程序返回一些缺失的状态,则需要在 readReponse()中为该响应代码添加处理程序。

    如果这两个步骤不能解决问题,则必须单步执行 readResponse(),查看从服务器返回的内容以及 readResponse()对其执行的操作。 您似乎没有遇到任何明显的错误、因为演示中有几个打印语句、如果出现错误、这些语句会被打印出来。 相反,您似乎要到 HTTPPostMethod()的末尾。

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

    现在我可以正确调试项目、我在 readResponse 中设置一个断点。

    另一件可能的事情是、您得到的 HTTP 响应不是 HTTP 200或 HTTP 404。 在演示中,readResponse()函数仅处理状态为200和状态为404的 HTTP 响应。 也许您正在从服务器获得一些其他状态,在这种情况下,readResponse()调用 flushHTTPResponse()并丢弃数据。 检查卷曲打印件并查看从服务器返回的状态。 您还可以在 readResponse()中放置一个断点,以查看返回的内容。 如果从处理程序返回一些缺失的状态,则需要在 readReponse()中为该响应代码添加处理程序。 

    您回答正确、我在 readResponse 中收到状态400。 如何删除此错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通过从自定义数据中删除后缀 NULL 来解决了这个问题,正是由于该数据我得到了响应400。 我不知道 cURL 如何处理字符串中的 NULL 后缀、但显然使用此 SDK 的 http API 在通过线缆发送数据之前不会省略 null。