我正在使用带有 MicroPython 固件的 ESP32,并且想要发出异步 HTTP 请求,例如 GET 请求。我试过使用,usocket
但它确实不断抛出OSError 128
。我在下面附上了我的套接字代码。我希望有一个异步的解决方案(因为我正在运行多个协程),因此是非阻塞的。该函数应该接受一个URL
andcallback
并且应该使用 http 请求的响应调用回调。
# Test url http://jsonplaceholder.typicode.com/todos/1
async def non_blocking_get(url, callback):
BUSY_ERRORS = [uerrno.EINPROGRESS, uerrno.ETIMEDOUT]
# Assume Wifi is connected
if not nic.isconnected():
return
_, _, host, path = url.split('/', 3)
addr = socket.getaddrinfo(host, 80)[0][-1]
s = socket.socket()
s.setblocking(0)
s.connect(addr)
s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
msg = None
while True:
try:
msg = s.recv(4096)
except OSError as e:
if e.args[0] not in BUSY_ERRORS:
raise
else:
continue
else:
if len(msg) == 0:
print('Zero size')
msg = None
break
print(msg)
s.close()
callback(msg)
任何帮助将不胜感激。先感谢您