我正在从我的移动应用程序(iOS-Swift 4)向安装在 ESP8266 上的 Simple Http Server(Micropython)和 PC 上的 BaseHTTPServer(Python)发送相同的帖子。
在 PC 上,我成功获取有效负载,如下所示,但是,当我发布到 ESP8266 时,我在正文中看不到任何有效负载,并且在 3-5 次请求后,我收到以下错误;您可以在下面看到 ESP8266 中的代码和 Swift 中的请求方法;(如果我在 Swift 中从我的请求中删除 JSON 数据,我不会收到以下错误,只有标头已成功发布到 ESP8266)
3-5 Post Request 后 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-调试(成功);
----- 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(未看到有效负载);
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()
快速请求代码
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()
}