关于Micropython的简单Http服务器问题(ESP8266)

时间:2018-02-06 13:35:16

标签: python-3.x swift3 nsurlrequest simplehttpserver micropython

我通过手机APP(iOS-Swift 4)向PC上的ESP8266和BaseHTTPServer(Python)安装的Simple Http Server(Micropython)发送相同的帖子。

在PC上,我正在成功获得Payload,如下所示,但是,当我发布到ESP8266时,我没有看到身体中的任何有效载荷,并且在3-5请求之后,我收到以下错误;您可以在下面的Swift中看到ESP8266中的代码和请求方法; (如果我在Swift中从我的请求中删除JSON数据,我没有收到跟踪错误,只有标题成功发布到ESP8266)

3-5个帖子请求后SWIFT中的错误;

2018-02-06 15:58:48.381801+0300 Chroma[1655:40174] TIC TCP Conn Failed [49:0x60400016c6c0]: 1:61 Err(61)
2018-02-06 15:58:48.385161+0300 Chroma[1655:40174] Task <542713C7-815D-479B-A462-DBD6A6EBB795>.<49> HTTP load failed (error code: -1004 [1:61])
2018-02-06 15:58:48.386808+0300 Chroma[1655:40159] Task <542713C7-815D-479B-A462-DBD6A6EBB795>.<49> finished with error - code: -1004
Could not connect to the server.

PC-DEBUG(SUCCEED);

----- Request Start ----->
Request path: /
Content Length: 20
Request headers: Host: 0.0.0.0:10000
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Accept: application/json
User-Agent: Chroma
Accept-Language: 
Content-Length: 20
Accept-Encoding: gzip, deflate
Request payload: {"COLOR":[0,255,95]}
<----- Request End -----

ESP8266-DEBUG(PAYLOAD NOT SEEN);

POST / HTTP/1.1
Host: 192.168.1.171:8080
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Accept: application/json
User-Agent: Chroma
Accept-Language: 
Content-Length: 20
Accept-Encoding: gzip, deflate

ESP8266上的代码

def webServer():  
    s = socket.socket()
    ai = socket.getaddrinfo("192.168.1.171", 8080)
    print("Bind address info:", ai)
    addr = ai[0][-1]
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind(addr)
    s.listen(2)
    while True:
        res = s.accept()
        client_sock = res[0]
        client_addr = res[1]
        # print("Client address:", client_addr)
        # print("Client socket:", client_sock)

        req = client_sock.recv(1024)
        print("Request: %s" % req.decode())

        client_sock.send("HTTP/1.0 200 OK\r\n\r\n'Color: JSON'\r\n")

        client_sock.close()
        print()

SWIFT REQUEST CODE

func sendPostToServer(color: [Int]) {
  var json = [String(): [Int()]]
  json = ["COLOR": color]

  let jsonData = try? JSONSerialization.data(withJSONObject: json)

  // create post request
  let url = URL(string: "http://192.168.1.171:8080")!
  // let url = URL(string: "http://0.0.0.0:10000")! //to pc server

  var request = URLRequest(url: url)

  request.httpMethod = "POST"
  request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
  request.setValue("application/json", forHTTPHeaderField: "Accept")
  request.setValue("", forHTTPHeaderField: "Accept-Language")
  request.setValue("Chroma", forHTTPHeaderField: "User-Agent")

  // insert json data to the request
  request.httpBody = jsonData

  let task = URLSession.shared.dataTask(with: request) { data, response, error in
      guard let data = data, error == nil else {
          print(error?.localizedDescription ?? "No data")
          return
      }
      let dataString = String(data: data, encoding: .utf8) ?? ""
      print("Response \(dataString)")
  }
  task.resume()
}

0 个答案:

没有答案