创建用于发出 GET 请求的非阻塞套接字

物联网 ESP32 微控制器 https 网络套接字 微蟒
2021-06-19 15:24:00

我正在使用带有 MicroPython 固件的 ESP32,并且想要发出异步 HTTP 请求,例如 GET 请求。我试过使用,usocket但它确实不断抛出OSError 128我在下面附上了我的套接字代码。我希望有一个异步的解决方案(因为我正在运行多个协程),因此是非阻塞的。该函数应该接受一个URLandcallback并且应该使用 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)

任何帮助将不胜感激。先感谢您

0个回答
没有发现任何回复~