HL? 2022-04-03 18:26
浏览 386
已结题

micropython,用esp32联网,然后调用urequests.get函数出现错误-202如何解决

问题遇到的现象和发生背景

esp32连上手机热点之后,调用urequests.get函数有时候是立即报错,有时候是运行一段时间后就报错

问题相关代码,请勿粘贴截图
# main.py
import urequests
from micropython import *
import time
try:
  import usocket as socket
except:
  import socket
# 热点名字
essid = ''
# 热点密码
password = ''
def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(essid, password)
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())
do_connect() 
time.sleep(2)    

# 访问ip地址 api
r = urequests.get("http://ip-api.com/json/")
print(r)
print(r.content)  # 返回响应的内容
print(r.text)  # 以文本方式返回响应的内容
print(r.content)
print(r.json())  # 返回响应的json编码内容并转为dict类型

# It's mandatory to close response objects as soon as you finished
# working with them. On MicroPython platforms without full-fledged
# OS, not doing so may lead to resource leaks and malfunction.
r.close()
# urequests.py
import usocket

class Response:

  def __init__(self, f):
    self.raw = f
    self.encoding = "utf-8"
    self._cached = None

  def close(self):
    if self.raw:
      self.raw.close()
      self.raw = None
    self._cached = None

  @property
  def content(self):
    if self._cached is None:
      self._cached = self.raw.read()
      self.raw.close()
      self.raw = None
    return self._cached

  @property
  def text(self):
    return str(self.content, self.encoding)

  def json(self):
    import ujson
    return ujson.loads(self.content)


def request(method, url, data=None, json=None, headers={}, stream=None,params=None):
  try:
    proto, dummy, host, path = url.split("/", 3)
  except ValueError:
    proto, dummy, host = url.split("/", 2)
    path = ""
  if proto == "http:":
    port = 80
  elif proto == "https:":
    import ussl
    port = 443
  else:
    raise ValueError("Unsupported protocol: " + proto)

  if ":" in host:
    host, port = host.split(":", 1)
    port = int(port)
    
  if params:
    path = path + "?"
    for k in params:
      path = path + '&'+k+'='+params[k]

  ai = usocket.getaddrinfo(host, port)
  addr = ai[0][4]
  s = usocket.socket()
  s.connect(addr)
  if proto == "https:":
    s = ussl.wrap_socket(s)
  s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
  if not "Host" in headers:
    s.write(b"Host: %s\r\n" % host)
  # Iterate over keys to avoid tuple alloc
  for k in headers:
    s.write(k)
    s.write(b": ")
    s.write(headers[k])
    s.write(b"\r\n")
  if json is not None:
    assert data is None
    import ujson
    data = ujson.dumps(json)
  if data:
    s.write(b"Content-Length: %d\r\n" % len(data))
  s.write(b"\r\n")
  if data:
    s.write(data)

  l = s.readline()
  protover, status, msg = l.split(None, 2)
  status = int(status)
  #print(protover, status, msg)
  while True:
    l = s.readline()
    if not l or l == b"\r\n":
      break
        #print(l)
    if l.startswith(b"Transfer-Encoding:"):
      if b"chunked" in l:
        raise ValueError("Unsupported " + l)
    elif l.startswith(b"Location:") and not 200 <= status <= 299:
      raise NotImplementedError("Redirects not yet supported")

  resp = Response(s)
  resp.status_code = status
  resp.reason = msg.rstrip()
  return resp


def head(url, **kw):
  return request("HEAD", url, **kw)

def get(url, **kw):
  return request("GET", url, **kw)

def post(url, **kw):
  return request("POST", url, **kw)

def put(url, **kw):
  return request("PUT", url, **kw)

def patch(url, **kw):
  return request("PATCH", url, **kw)

def delete(url, **kw):
  return request("DELETE", url, **kw)

urequest.get()方法调用参考https://mpython.readthedocs.io/zh/master/library/mPython/urequests.html?highlight=urequests

运行结果及报错内容

img

我的解答思路和尝试过的方法

百度了说没联网,连上了也会报错,甚至重新启动端口有时候也不行

我想要达到的结果

如何解决这个问题

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月11日
    • 创建了问题 4月3日

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器