可以在没有HTTPS/HTTP的情况下使用request .get()吗?



我有一个代码,从flag Mashup Bot获取一个随机标志并下载它:

import requests
DIR = 'C:/Users/myUser/Desktop/Flags/'
URL = 'https://flagsmashupbot.pythonanywhere.com/mashup?passwd=fl4gsm4shupb0t'

def download_image(img_url: str, dest_dir: str):
img_data = requests.get(img_url).content
with open(dest_dir, 'wb') as file:
file.write(img_data)

if __name__ == "__main__":
response = requests.get(URL)
if response.ok:
page = response.text
image_url = page[page.find('data:image', page.find('data:image') + 1):page.find('" download=')]
name = page[page.find('" download=') + 12:page.find('_FlagsMashupBot.png"')]
DIR += (name + '.png')
print(DIR)
download_image(image_url, DIR)

当我运行它时,我在第8行得到以下错误:

requests.exceptions.InvalidSchema: No connection adapters were found for [image URL]

当我读到它的时候,我意识到这是因为来自网站的图像url没有以"https://"(至少我是这么理解的)。那么,有没有一种方法可以使用request .get()而不需要在URL的开头使用https ?

你不会得到一个基于HTTP/HTTPs的URL的原因是,因为数据是在指向图像的base64编码版本的href格式。您可以使用urllib打开href下载链接并将内容保存到一个文件:

data = 'data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAABwgAAASwCAIAAABggIlUAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdaZhd92Hf97Pde+fOYGYAzAx2gCBBivsCgqtEUl7piF.......'
response = urllib.request.urlopen(data)
with open('image.png', 'wb') as f:
f.write(response.file.read())

最新更新