主题中讨论的其他器件:CC3220S、 CC3200
您好!
我正在尝试使用 SDK v2.1中的 HTTP API、将获取天气示例与 CC3220结合使用。 下面是原始"获取天气"代码以及"我的代码尝试"对其进行转换的链接。 但是,我无法成功地做到这一点。 有人能帮我解决这个问题吗? 谢谢。
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.
您好!
我正在尝试使用 SDK v2.1中的 HTTP API、将获取天气示例与 CC3220结合使用。 下面是原始"获取天气"代码以及"我的代码尝试"对其进行转换的链接。 但是,我无法成功地做到这一点。 有人能帮我解决这个问题吗? 谢谢。
我在下面的代码中得到了错误、您可以在 GitHub 链接的第227行中看到该错误。
lRetVal = HttpClient_sendRequest (CLI、http_method_get、acSendBuff、NULL、0、0);
如果(lRetVal < 0)
{
//uart_print ("发送 HTTP 1.1 GET 请求失败。\n\n");
返回 SERVER_GET_WEATE_FAILED;
}
Michael Reymond 收到错误代码-3018。 sendRequest 函数中的错误如下所示。
/*块化状态*/ 其他 { /*有效性检查*/ if ((flags & HttpClient_chunch_start)||(NULL ==正文) { 返回(HttpClient_EWRONGAPIPARAMETER); } }
尊敬的 Jack:
调用 HttpClient_sendRequest()时,是否已检查 HttpClient_CB *CLI 的状态并查看其成员变量是否合理?
我怀疑以下调用不正确地传递对 HttpClient_handle 的引用:
StatusCode = GetWeather (&httpClientHandle、&acCityName[0]);
而应该是这样
StatusCode = GetWeather (httpClientHandle、&acCityName[0]);
尝试一下、看看它是否修复了问题。
此致、
Michael
我发现在以下代码中出现问题后。 程序只需输入"else"语句、"Breaks"、然后返回401的状态。
if (getCliState (CLI、enable_redirect_State)&&(isRedirect (status))) { if (getCliState (CLI、location_added_State)) { /*如果在内部过滤了位置标头,请将其从过滤器列表中去除*/ cli->responseHFieldFilter &=~(NumberToBitField (HttpClient_HFIELD_RES_LOCATION); setCliState (CLI、location_added_State、false); } if (redirectFlag & Incomplete_location) { /*位置标头不完整重定向是不可接受的*/ return( HttpClient_EREDIRECTLOCATIONFAIL ); } if (redirectCount < HttpClient_MAX_redirective_Attempts) { RET =重定向(CLI、状态、方法); 如果(RET < 0) { return (ret); } } redirectCount++; } 否则((status =HTTP_SC_unauthorized)&&(cli->httpAuthCallback != NULL)) { /*检查 www.-authenticate 是否是有效的响应标头*/ if (((cli->responseHeaderMap[WWW_Authenticate_hash-index]!= NULL)&&(strstr (cli->responseHeaderMap[WWW_Authenticate_hash-index]、"HttpClient_ERESPONSEVALUEBUFSMALL")= NULL)) { /*执行用户注册的身份验证回调*/ RET = cli->httpAuthCallback (cli->responseHeaderMap[WWW_Authenticate_hash-index]、strlen (cli->responseHeaderMap[WWW_Authenticate_hash-index])、buf、&bufLen); 如果(RET < 0) { return (ret); } /*添加客户端授权请求标头*/ RET = HttpClient_setHeader (CLI、HttpClient_HFIELD_REQ_authorization、buf、bufLen、HttpClient_HFIELD_not _persistent); /*如果使用的方法是 HEAD,即使存在内容长度标头,服务器也不会发送正文*/ if (strcmp (method、http_method_head)!= 0) { /*刷新响应的主体(如果存在) * 操作 { RET = HttpClient_readResponseBody (CLI、buf、HttpClient_BUF_LEN、&M 标志); 如果(RET < 0) { 返回(RET); } } while (((ret >0)&& moreFlag); } 其他 { cli->bodyLen = 0; } } /*停止 do while 循环并退出 sendRequest()函数,以便重新发送请求 使用生成的授权标头*/ 中断; } 其他 { 中断; }
当您说"如果您没有可运行此测试的 CC3200、您还可以使用诸如 cURL 之类的 PC 实用程序"时、您要求我做什么?
下面是我从 CC3220收到的消息。 请求可能有什么问题?
获取/data/2.5/weather?q=Salem mode=xml&units=tiper&appId= HTTP/1.1 主机:HttpClient (ARM;TI-RTOS)¾¾¾¾¾¾¾°k 主机:api.openweathermap.org 有关详细信息、请参阅 openweathermap.org/faq。"}
尊敬的 Jack:
因此、当我传递了不正确的 API 密钥时、我测试了 cURL 并得到了此响应:
C:\Users\a0232058\Downloads\cur-7.54.0-win64-MinGw\cur-7.54.0-win64-MinGw>curl -G"api.openweathermap.org/.../weather --proxy http://wwwgate.ti.com:80/ -v *正在尝试10.248.194.19... * tcp_NODELAY 设置 *连接到 wwwgate.ti.com (10.248.194.19)端口80 (#0) >获取 api.openweathermap.org/.../weather HTTP/1.1 >主机:api.openweathermap.org >用户代理:c卷 曲/7.54.0> 接受:*/* >代理连接:保持活动 > < HTTP/1.1 401未经授权 <通过1.1 10.248.194.19 (McAfee Web Gateway 2018 年10月27日< GMT 238.41:星期一:215.0) openresty < X-Cache:从10.248.194.19错过 < X-Cache - Key:/data/2.5/weather?mode=xml &q=Salem &units=英制 < Content-Type:application/json;charset=UTF-8 < Content-Length:107 < Proxy-Connection:keep-alive < Access-Control-allent-origin:* < Access-Control-allow-methods:get、"ccentials" 、"ccentials"、"Get-capacitivity"、"Cod:try"、"try"、"tradement-try"、"its"、"API"。 有关 更多信息,请参见 openweathermap.org/faq。"}*保留用于承载 wwwgate.ti.com 的连接#0
这与之前观察到的401误差一致。
但是、当我注册并传递正确的授权密钥时、我得到以下输出:
C:\Users\a0232058\Downloads\cur-7.54.0-win64-MinGw\cur-7.54.0-win64-MinGw>curl -G"api.openweathermap.org/.../weather --proxy http://wwwgate.ti.com:80/ -v *正在尝试10.248.194.18... * tcp_NODELAY 设置 *连接到 wwwgate.ti.com (10.248.194.18)端口80 (#0) >获取 api.openweathermap.org/.../weather HTTP/1.1 >主机:api.openweathermap.org >用户代理:c卷 曲/7.54.0> 接受:*/* >代理连接:保持活动 > < HTTP/1.1 200正常 <通过:1.1 10.248.194.18 (McAfee Web Gateway 2018 < GMT 2.59:14)服务器:< openresty < X-Cache:从10.248.194.18缺失 < X-Cache -密钥:/data/2.5/weather?APPID=59acd840241603ed1f973173a73072cb &mode=xml&q=Dallas&units=英制 < Content-Type:application/xml;charset=UTF-8 < Content-Length:771 < Proxy-Connection:Keep-Alive < Access-Control-allow-origin:* < Access-Control-allow-allow-Get-Control <允许访问后凭据 美国 *主机 wwwgate.ti.com 的连接#0保持不变
我会仔细检查您使用的 API 密钥、并确保在您的 CC3220示例中正确提供该密钥。 请注意、API 密钥激活之前需要一些时间(对我来说是~1小时左右)。 如果您立即尝试使用 API 密钥、请再试一次、看看会发生什么情况。
此致、
Michael