SIM5320e开发板HTTPS GET请求失败,寻求关键解决步骤
SIM5320e 3G模块无法发起HTTP GET请求,发送字符数始终为0
我目前在用SIM5320e 3G开发板,搭配CoolTerm和PL203串口转USB连接器,目标是实现HTTP/HTTPS GET请求,之后整合到单片机项目里,通过EDGE/GPRS/3G把远程传感器数据传到互联网。但现在一直没法成功发起GET请求,查了资料(除了复杂的数据手册)还是没找到关键问题。
以下是带注释的典型终端输出:
AT OK // 模块正常工作 AT+CGSOCKCONT=1,"IP","giffgaff.com" // 设置APN(使用英国Giffgaff SIM卡) OK AT+CSOCKSETPN=1 // 参考应用笔记执行此步骤,具体作用不明 OK AT+CIPMODE=0 // 同上 OK AT+NETOPEN=,,1 Network opened OK // 通过GPRS打开网络连接 AT+IPADDR +IPADDR: 10.146.130.153 OK // 成功获取网络地址 AT+CHTTPSSTART OK // 启动HTTPS/HTTP协议栈 AT+CHTTPSOPSE="www.iforce2d.net", 80,1 OK // 与主机80端口建立连接 AT+CHTTPSSEND=23 // 请求发送23字符数据 >GET /test.php HTTP/1.1 // 目标页面存在,显示UTC时间 OK AT+CHTTPSEND OK +CHTTPSEND: 0 // 提示发送无问题,但实际发送字符数为0 AT+CHTTPSEND? // 查询发送状态 +CHTTPSEND: 0 // 确实未发送任何字符! OK +CHTTPSNOTIFY: PEER CLOSED AT+CHTTPSRECV? // 查询是否收到数据 +CHTTPSRECV: LEN,0 // 未收到任何数据! OK
请问我遗漏了哪些关键步骤?感谢您的关注。
解决思路与关键遗漏步骤
你已经搞定了基础的网络连接,但几个细节没处理到位,导致请求根本没真正发出去,我帮你拆解一下:
1. HTTP请求格式不完整,且缺少结束符
这是最核心的问题:
- 你的GET请求只有
GET /test.php HTTP/1.1,但HTTP/1.1协议强制要求必须包含Host头,而且每一行头信息后要换行,最后需要两个连续的换行表示请求结束(GET请求没有请求体,所以直接两个换行即可)。完整的请求内容应该是:GET /test.php HTTP/1.1 Host: www.iforce2d.net - 另外,当模块返回
>提示符等待你输入请求内容时,输入完内容后不能直接按OK,必须发送Ctrl+Z(对应ASCII码0x1A)作为结束符,模块才会把输入的内容发送出去。你现在直接按OK,模块没收到结束信号,自然认为没有数据要发送,就出现了+CHTTPSEND: 0的情况。
2. 混淆了HTTP和HTTPS的端口与命令
你启动了AT+CHTTPSSTART(HTTPS协议栈),但连接的是80端口——这是HTTP的默认端口,HTTPS应该用443端口。如果只是测试HTTP请求,建议直接用AT+HTTPSTART对应的HTTP命令集,操作更简单;如果要发HTTPS请求,把端口改成443,还可以临时关闭证书校验(用AT+CHTTPSSET=1设置不校验)来简化测试。
3. 简化命令流程,避免不必要的参数
你提到AT+CSOCKSETPN=1和AT+CIPMODE=0是参考应用笔记但不清楚作用,其实用HTTP/HTTPS命令集的话,这些参数模块会自动处理,不用手动设置。你可以试试更简洁的流程:
AT // 测试模块连通性 OK AT+CGSOCKCONT=1,"IP","giffgaff.com" // 设置APN OK AT+NETOPEN=,,1 Network opened OK AT+IPADDR // 确认获取到IP +IPADDR: xxx.xxx.xxx.xxx OK AT+HTTPSTART // 启动HTTP协议栈 OK AT+HTTPPARA="URL","http://www.iforce2d.net/test.php" // 直接设置完整请求URL OK AT+HTTPACTION=0 // 发起GET请求(0代表GET方法) // 等待返回,比如+HTTPACTION: 0,200,xxx 表示请求成功,状态码200 AT+HTTPREAD // 读取服务器响应内容
这个流程比用CHTTPS命令更直观,也更容易排查问题。
4. 提前验证基础状态
在发起请求前,建议加几个命令确认模块状态:
AT+CSQ:检查信号强度,返回值比如+CSQ: 20,99,第一个值大于10就表示信号足够。AT+CREG?:检查网络注册状态,返回+CREG: 0,1或+CREG: 0,5表示注册成功(1是本地注册,5是漫游注册)。
按照这些步骤调整后,应该就能成功发起GET请求了。
内容的提问来源于stack exchange,提问作者Will Fox
相关产品推荐
相关产品推荐

