tianyiran02 发表于 2014-3-8 20:25:58

请教一个SIM900 POST数据的问题!!!

因为做一个项目需要用SIM900 post数据到服务器上。因为个人专业不一样所以感觉很迷茫。自己测试了几天了还是没有太大进展。把自己的发到这里麻烦大家知道一下。

主要问题是不清楚SIM900 POST的交互流程。我用一个叫wfetch(webfetch)的小软件做了一些测试,


这是web fetch的发送、配置的截图

Post之后Log如下:

REQUEST: **************\n
POST /ws/DataPoint HTTP/1.0\r\n
Host: login.etherios.com\r\n
Accept: */*\r\n
Content-Length:279\r\n
Authorization: Basic c2VhbnByaWRkeTpvOWk4dTd5RVQk\r\n
\r\n
<DataPoint>\r\n
<size>2</size>\r\n
<data>42</data>\r\n
<timestamp>2014-03-06T10:42:12+00:00</timestamp>\r\n
<streamId>Channel/DeviceID/Sensor/Temp</streamId>\r\n
<data>43</data>\r\n
<timestamp>2014-03-06T10:42:50+00:00</timestamp>\r\n
<streamId>Channel/DeviceID/Sensor/Temp</streamId>\r\n
</DataPoint>\r\n
RESPONSE: **************\n
HTTP/1.1 201 Created\r\n
Server: Apache-Coyote/1.1\r\n
Set-Cookie: JSESSIONID=EC386551E696AB2CDFBBE5C7D9EDCE58; Path=/ws/; Secure; HttpOnly\r\n
Cache-Control: no-store\r\n
Pragma: no-cache\r\n
Expires: Thu, 01 Jan 1970 00:00:00 GMT\r\n
Location: DataPoint/Channel/DeviceID/Sensor/Temp/102873c8-a51c-11e3-8f9e-bc764e105279\r\n
Content-Type: application/xml;charset=ISO-8859-1\r\n
Content-Language: en-US\r\n
Date: Thu, 06 Mar 2014 10:47:12 GMT\r\n
Connection: close\r\n
Set-Cookie: BIGipServerPOOL-108.166.22.160-login.etherios-80=1942073354.20480.0000; path=/\r\n
Vary: Accept-Encoding, User-Agent\r\n
\r\n
<?xml version="1.0" encoding="ISO-8859-1"?>\n
<result>\n
   <location>DataPoint/Channel/DeviceID/Sensor/Temp/102873c8-a51c-11e3-8f9e-bc764e105279</location>\n
</result>
WWWConnect::Close("108.166.22.160","80")\n
closed source port: 51846\r\n
finished.

个人以为在用GSM module post的时候遵循的方法应该类似,个人的操作如下:

省略了基本的配置操作:

AT+HTTPINIT

OK
AT+HTTPPARA="URL","login.etherios.com"

OK
AT+HTTPPARA="CID",1

OK
AT+HTTPDATA=200,100000

DOWNLOAD

(这里从UART输入的数据如下:
POST /ws/DataPoint HTTP/1.0
Host: login.etherios.com
Accept: */*
Content-Length:143
Authorization: Basic c2VhbnByaWRkeTpvOWk4dTd5RVQk

<DataPoint>
<data>53</data>
<timestamp>2014-03-08T11:52:50+00:00</timestamp>
<streamId>Channel/DeviceID/Sensor/Temp</streamId>
</DataPoint>\r\n



OK
AT+HTTPACTION=1

OK

+HTTPACTION:1,302,0

返回的值永远是302啊。。。我是不是哪里操作错误了啊。。。麻烦大家指教啊!!!

tianyiran02 发表于 2014-3-8 20:35:24

我尝试把AT+HTTPPARA="UAR","login.etherios.com" 改成AT+HTTPPARA="URL","http://login.etherios.com"结果仍然为302,改成AT+HTTPPARA="URL","http://www.login.etherios.com"结果就是603了。。。很纠结啊。网上资料不好找。SIMCOM的DATAsheet也没有很详细的讲具体的HTTPDATA格式这样。

casterbn 发表于 2014-3-8 20:48:08

HTTP返回状态码的含义比较丰富,随着HTTP版本的变化,状态码也在逐渐增加,以满足越来越多的状态信息传递。
      302错误表示被请求的资源暂时转移(Moved temporatily),然后会给出一个转移后的URL,而浏览器在处理服务器返回的302错误时,原则上会重新建立一个TCP连接,然后再取重定向后的URL的页面;但是如果页面存在于缓存中,则不重新获取。

用可能要用 www.login.etherios.com

tianyiran02 发表于 2014-3-8 21:46:56

casterbn 发表于 2014-3-8 20:48
HTTP返回状态码的含义比较丰富,随着HTTP版本的变化,状态码也在逐渐增加,以满足越来越多的状态信息传递。 ...

感谢回答!!我用wfetch能够正常上传,但是用SIM900不行了。。。确实不太清楚原理啊。。。很纠结。。

tianyiran02 发表于 2014-3-13 01:32:00

我就自问自答吧。用自带的协议没有解决这个问题。但是还是用TCP连接解决了这个问题。我的连接流程如下:

Tcp: (Network initial different)
AT+CSTT=“APN”,”USER”,”PSW” //SET UP APN
AT+CMEE=1 //ATTACH TO THE NETWORK
AT+AGATT=1
AT+CIICR //BRING UP GPRS CONNECTION
AT+CIFSR //GET LOCAL IP ADDRESS
AT+CDNSGIP=”domain”
AT+CIPSTART="TCP","211.xxx.xxx.xxx",”80”
AT+CIPSEND

UART:
POST /ws/DataPoint HTTP/1.1
Host: login.etherios.com
Accept: */*
Content-Length:143
Authorization: Basic c2VhbdsadfafOWk4dTd5RVQk

<DataPoint>
<data>50</data>
<timestamp>2014-03-08T20:30:50+00:00</timestamp>
<streamId>Channel/DeviceID/Sensor/Temp</streamId>
</DataPoint>
页: [1]
查看完整版本: 请教一个SIM900 POST数据的问题!!!