我通过手机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()
}