无法使用 ESP8266 发出 HTTP 请求
Cannot make HTTP request using ESP8266
几天以来,我一直在尝试将简单的网络应用程序与 ESP8266 模块结合起来。现在我无法从 ESP(配置为客户端)向我的应用程序或任何其他服务器发送 HTTP 请求。
当我每次收到 Bad request 时都尝试向某个网站发出 GET 请求。这是我的命令(我使用 python 脚本来加速建立连接的过程。)
send_command('AT+CWMODE=1\n', wifi)
send_command('AT+CIPMUX=0\n', wifi)
send_command('AT+CWJAP="my_network","password"\n', wifi)
send_command('AT+CIPSTART="TCP","onet.pl",80\r\n', wifi,2)
request = r"HEAD / HTTP/1.1\r\nHost: onet.pl\r\nConnection: close\r\n\r\n"
send_command('AT+CIPSEND=' + str(len(request)) + '\n', wifi)
send_command(request,wifi,5)
Send_command函数:
def send_command(komenda, serial_name,czas=1):
while serial_name.writable() == 0:
pass
serial_name.write((komenda).encode())
while serial_name.out_waiting:
pass
while serial_name.in_waiting == 0:#<= len(komenda)+4:
pass
while serial_name.readable() == 0:
pass
res = (serial_name.read(serial_name.in_waiting))
if czas == 1:
time.sleep(1)
else:
time.sleep(2)
if serial_name.in_waiting:
res= res+ (serial_name.read(serial_name.in_waiting))
print (res.decode('utf-8','ignore'))
serial_name.reset_input_buffer()
serial_name.reset_output_buffer()
return res.decode('utf-8','ignore')
响应是:
+IPD,160:HTTP/1.1 400 Bad Request
Server: Dreamlab Accelerator
Date: Sat, 10 Jun 2017 16:32:00 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
对于我的代码中有什么问题的任何建议,我将不胜感激。
又过了一天我解决了这个问题。
这是我的解决方案(也许对其他人有帮助)
- 升级esp8266固件到0.9.5.2版本
- 每个命令都应该以符号'\r\n'结束
- 每个命令都应该是普通字符串(不是上面 post 中请求命令中的原始字符串)。
几天以来,我一直在尝试将简单的网络应用程序与 ESP8266 模块结合起来。现在我无法从 ESP(配置为客户端)向我的应用程序或任何其他服务器发送 HTTP 请求。
当我每次收到 Bad request 时都尝试向某个网站发出 GET 请求。这是我的命令(我使用 python 脚本来加速建立连接的过程。)
send_command('AT+CWMODE=1\n', wifi)
send_command('AT+CIPMUX=0\n', wifi)
send_command('AT+CWJAP="my_network","password"\n', wifi)
send_command('AT+CIPSTART="TCP","onet.pl",80\r\n', wifi,2)
request = r"HEAD / HTTP/1.1\r\nHost: onet.pl\r\nConnection: close\r\n\r\n"
send_command('AT+CIPSEND=' + str(len(request)) + '\n', wifi)
send_command(request,wifi,5)
Send_command函数:
def send_command(komenda, serial_name,czas=1):
while serial_name.writable() == 0:
pass
serial_name.write((komenda).encode())
while serial_name.out_waiting:
pass
while serial_name.in_waiting == 0:#<= len(komenda)+4:
pass
while serial_name.readable() == 0:
pass
res = (serial_name.read(serial_name.in_waiting))
if czas == 1:
time.sleep(1)
else:
time.sleep(2)
if serial_name.in_waiting:
res= res+ (serial_name.read(serial_name.in_waiting))
print (res.decode('utf-8','ignore'))
serial_name.reset_input_buffer()
serial_name.reset_output_buffer()
return res.decode('utf-8','ignore')
响应是:
+IPD,160:HTTP/1.1 400 Bad Request
Server: Dreamlab Accelerator
Date: Sat, 10 Jun 2017 16:32:00 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
对于我的代码中有什么问题的任何建议,我将不胜感激。
又过了一天我解决了这个问题。 这是我的解决方案(也许对其他人有帮助)
- 升级esp8266固件到0.9.5.2版本
- 每个命令都应该以符号'\r\n'结束
- 每个命令都应该是普通字符串(不是上面 post 中请求命令中的原始字符串)。