Python自动上传图片到路过图床
本文最后更新于:2 年前
前言
之前介绍了上传图片到imgbox,使用了第三方模块,那么我们现在用requests实现怎么上传图片到路过图床。
流程
首先我们先访问路过网站注册一个新的账号,然后登陆。F12获取登陆的cookie,用于填充在以下的代码中:
至于要提交什么数据其实使用Fiddler就可以了,但是这个不是我们今天讨论的重点。我们先来看看python是怎么实现的。
废话不多说,上代码:
import requests
import time
import json
import re
# 上传图片到路过图床
def send_luguo(img_loc=None):
# 提交的数据为multi-part,一部分是文件,一部分是数据
## 打开文件二进制流,命名为source,抓取到的,类型为image/jpeg
img = open(img_loc, "rb")
files = [('source', (img_loc.split('\\')[-1], img, 'image/jpeg'))]
## 提交的数据中有一个重要的字符串为auth_token,基本上会定时变,所以在上传之前我们先访问一次页面获取一下
auth_token = get_auth_token()
data = {
'type': 'file',
'action': 'upload',
'timestamp': int(time.time()) * 1000,
'auth_token': auth_token,
'nsfw': "0"
}
## 请求的地址
des_url = 'https://imgtu.com/json'
## 提交数据和文件,cookies也是转换好的
try:
des_post = requests.post(
url=des_url,
data=data,
files=files,
cookies=luguo_cookies)
response = des_post.content.decode()
data = json.loads(response)
print(data)
return data['image']['url']
except Exception as exc:
print('截图上传失败……%s' % exc)
return None
# 上传之前先访问一次页面获取auth_token
def get_auth_token():
url = 'https://imgtu.com/'
response = requests.get(url, cookies=luguo_cookies)
html = response.content.decode()
token = re.search('auth_token=[a-z0-9]*', html).group()
token = token.split('=')[-1].strip()
return token
## 将cookie字符串转换成字典的形式
def cookies_raw2jar(raw: str) -> dict:
"""
Arrange Cookies from raw using SimpleCookies
"""
if not raw:
raise ValueError("The Cookies is not allowed to be empty.")
from http.cookies import SimpleCookie
cookie = SimpleCookie(raw)
return {key: morsel.value for key, morsel in cookie.items()}
if __name__ == "__main__":
luguo_cookie_raw = "" # 登录后获取到的cookie字符串
luguo_cookies = cookies_raw2jar(luguo_cookie_raw) # 转换成字典
img_path = r"E:\HUDBT\imgs\Blood.of.Zeus.S01E08.War.for.Olympus.1080p.NF.WEB-DL.DDP5.1.x264-MZABI.mkv.jpg" # 测试的图片链接
send_luguo(img_path, auth_token) # 上传返回的是图片的地址
输出结果(隐去了一部分不重要的个人信息):
{
'status_code': 200,
'success': {
'message': 'image uploaded',
'code': 200
},
'image': {
'name': '6oOpND',
'extension': 'jpg',
'size': 195587,
'width': '1216',
'height': '1055',
'date': '2021-03-22 19:57:12',
'date_gmt': '2021-03-22 11:57:12',
'title': 'Blood.of.Zeus.S01E08.War.for.Olympus.1080p.NF.WEB DL.DDP5.1.x264 MZABI.mkv',
'description': None,
'nsfw': '0',
'storage_mode': 'datefolder',
'md5': '7cf830075aff82dd6a8bb32d5ad565d7',
'original_filename': 'Blood.of.Zeus.S01E08.War.for.Olympus.1080p.NF.WEB-DL.DDP5.1.x264-MZABI.mkv.jpg',
'original_exifdata': '{"FileName":"Blood.of.Zeus.S01E08.War.for.Olympus.1080p.NF.WEB-DL.DDP5.1.x264-MZABI.mkv.jpg","FileDateTime":"1616414232","FileSize":"195587","FileType":"2","MimeType":"image\\/jpeg","SectionsFound":"","COMPUTED":{"html":"width=\\"1216\\" height=\\"1055\\"","Height":"1055","Width":"1216","IsColor":"1"}}',
'views': '0',
'category_id': None,
'chain': '7',
'thumb_size': '12273',
'medium_size': '118214',
'expiration_date_gmt': None,
'likes': '0',
'is_animated': '0',
'source_md5': None,
'is_approved': '1',
'file': {
'resource': {
'type': 'url'
}
},
'id_encoded': '6oOpND',
'filename': '6oOpND.jpg',
'mime': 'image/jpeg',
'url': 'https://z3.ax1x.com/2021/03/22/6oOpND.jpg',
'ratio': 1.15260663507109,
'size_formatted': '195.6 KB',
'url_viewer': 'https://imgtu.com/i/6oOpND',
'url_short': 'https://imgtu.com/i/6oOpND',
'image': {
'filename': '6oOpND.jpg',
'name': '6oOpND',
'mime': 'image/jpeg',
'extension': 'jpg',
'url': 'https://z3.ax1x.com/2021/03/22/6oOpND.jpg',
'size': 195587
},
'thumb': {
'filename': '6oOpND.th.jpg',
'name': '6oOpND.th',
'mime': 'image/jpeg',
'extension': 'jpg',
'url': 'https://z3.ax1x.com/2021/03/22/6oOpND.th.jpg',
'size': '12273'
},
'medium': {
'filename': '6oOpND.md.jpg',
'name': '6oOpND.md',
'mime': 'image/jpeg',
'extension': 'jpg',
'url': 'https://z3.ax1x.com/2021/03/22/6oOpND.md.jpg',
'size': '118214'
},
'display_url': 'https://z3.ax1x.com/2021/03/22/6oOpND.md.jpg',
'display_width': '680',
'display_height': 590,
'views_label': '次浏览',
'likes_label': '喜欢',
'how_long_ago': '2 秒 前',
'date_fixed_peer': '2021-03-22 19:57:12',
'title_truncated': 'Blood.of.Zeus.S01E08.War....',
'title_truncated_html': 'Blood.of.Zeus.S01E08.War....',
'is_use_loader': False
},
'request': {
'type': 'file',
'action': 'upload',
'timestamp': '1616414181000',
'auth_token': '',
'nsfw': '0'
},
'status_txt': 'OK'
}
测试图片:
其实发现提供的数据还是挺多的,不仅包括图片链接,还有缩略小图和中等大小的图片。国内很多图床都是这种架构,那么只需要更改部分代码就可以实现上传图片到其他图床了,但是——请不要滥用。
本文只做技术探讨,不鼓励存放过多无意义的图片。本文属于原创作品,如果你喜欢这篇文章请收藏转发,或者给作者一定的打赏支持吧。