当前位置:首页 > 项目 > Wpython > 正文内容

micropython 实现文件下载保存到本地

Watrt2年前 (2023-05-31)Wpython7300
import sys
import gc
import ussl
import usocket

gc.collect()
debug = False
index_urls = ["https://micropython.org/pi", "https://pypi.org/pypi"]
install_path = None
cleanup_files = []

file_buf = bytearray(512)
warn_ussl = True

def url_open(url):
    global warn_ussl

    if debug:
        print(url)

    proto, _, host, urlpath = url.split("/", 3)
    try:
        if proto == "https:":
            port = 443
        else:
            port = 80
        if ":" in host:
            host, port = host.split(":")
            port = int(port)
        ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM)
    except OSError as e:
        fatal("Unable to resolve %s (no Internet?)" % host, e)
        print("Address infos:", ai)
    ai = ai[0]

    s = usocket.socket(ai[0], ai[1], ai[2])
    try:
        # print("Connect address:", addr)
        s.connect(ai[-1])

        if proto == "https:":
            s = ussl.wrap_socket(s, server_hostname=host)
            if warn_ussl:
                print("Warning: %s SSL certificate is not validated" % host)
                warn_ussl = False

        # MicroPython rawsocket module supports file interface directly
        s.write("GET /%s HTTP/1.0\r\nHost: %s:%s\r\n\r\n" % (urlpath, host, port))
        l = s.readline()
        protover, status, msg = l.split(None, 2)
        if status != b"200":
            if status == b"404" or status == b"301":
                raise NotFoundError("Package not found")
            raise ValueError(status)
        while 1:
            l = s.readline()
            if not l:
                raise ValueError("Unexpected EOF in HTTP headers")
            if l == b"\r\n":
                break
    except Exception as e:
        s.close()
        raise e
    return s
def download(url,fname=None,length=512):
  file_buf = bytearray(length)
  downloadfile=url_open(url)
  if not fname:
      fname=url.split('/')[-1]
  with open(fname, "wb") as outf:
      while True:
          sz = downloadfile.readinto(file_buf)
          if not sz:
              break
          outf.write(file_buf, sz)
  
def fatal(msg, exc=None):
    print("Error:", msg)
    if exc and debug:
        raise exc
    sys.exit(1)

#cc=url_open("http://app.xb6.cn/home/api")
download("https://www.west.cn/images2016/logo.jpg",'/img/l.jpg')

download("https://www.west.cn/images2016/logo.jpg",'/img/l.jpg')  第一个参数为下载地址 第二个参数为本地保存位置

分享给朋友:

相关文章

wpython板子的gui版本已经设计完成

wpython板子的gui版本已经设计完成

这个是已经修改过多次的了。现在是1.6版1、调整旋转编码器为5向开关2、调整LCD的SPI为HSPI(SPI1)为IO_MUX 直接硬件接口不在通过GPIO matrix,理论上能够达到速度80M(待测试)3、调整电池供电芯片为:SPX3819M5解决使用asm1117 3.3 压差不够,电压不能够稳定到3.3的BUG4、留出I2S接口5、调整I2C接口为插座位置。6、调整布线,板子更小了...

wpython_GUI 1.6板子回来了

wpython_GUI 1.6板子回来了

板子打出来了。小的元件已经SMT好了,大的元件我已经自己手焊好了,先给大家看看样板两个LED因为出于成本的原因是单面贴,双面太贵了,而且感觉不重要就先没有焊正面,大体算正常吧,但是也现在了两个BUG,还是缺少经验。1、ESP32的IO36脚和IO39脚,只支持输入模式,而且没有内部上拉,所以要外挂上拉,这点在画板的时间 没有想到。目前使用的是补焊两个电阻补救上(KEY_A、KEY_B)。2、还有一个就是屏的背景使用的是S8050当做背光开关,结果发现在虽然可以过通IO来控制引脚,但是背景电压太低...

LVGL_micropython 模拟器

LVGL_micropython 模拟器

在使用micropython编写lvgl界面时有时间非常的麻烦。要在设备上才看得到效果。比较麻烦。npx的GUI-Guider软件中的模拟器给抠出来了单独使用,非常不错。下面是运行实例:import SDL import utime as time import usys as sys import lvgl as lv import lodepng as p...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。