语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床

admin 2023年6月15日03:42:39评论114 views字数 2384阅读7分56秒阅读模式

前言

之前写的【两万字原创长文】完全零基础入门Fastjson系列漏洞(基础篇),我一开始是写在语雀上面的,然后同步github之后才发现,图片居然都无法访问,我再仔细一了解,然后发现原来是语雀在2019年之后就整了个防盗链机制,所以这篇文章我会给出我的解决办法。

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
fengmian

解决思路

出问题的地方:

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
图片都是无法访问 ,显示403

关于这个机制的绕过方面,网络上有且仅有三个思路:

前两个是该博主提到的:

https://yanisyoung.com/2020/10/10/yuque/关于Hexo无法访问语雀图片的解决方案/

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
image-20230614233003971

第三种则是改造hexo-yuque这个插件,使其可以绕过cdn

https://1874.cool/osar7h

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
image-20230614233100563

但是我不是很能看懂他这个怎么操作的,于是干脆提出第四种又快又快的解决办法:转移图片到我已有的阿里云oss上面。

代码实现

实现代码相当简单,直接贴出来:

import requests
import os
import oss2

# Markdown文件路径
markdown_file = '1.md'
# 图片保存目录
image_dir = 'images'
# 阿里云配置
access_key_id = '1234'
access_key_secret = '1234'
bucket = 'w01fh4cker-img-bed'
area = 'oss-cn-hangzhou'

# 创建图片保存目录
if not os.path.exists(image_dir):
    os.makedirs(image_dir)

# 读取Markdown文件内容
with open(markdown_file, 'r', encoding='utf-8'as file:
    markdown_content = file.read()

# 提取图片链接
image_links = []
start_index = 0
while True:
    start_index = markdown_content.find('!(', start_index)
    if start_index == -1:
        break
    start_index += 7
    end_index = markdown_content.find(')', start_index)
    image_link = markdown_content[start_index:end_index]
    image_links.append(image_link)

# 初始化阿里云OSS客户端
auth = oss2.Auth(access_key_id, access_key_secret)
endpoint = f'http://{area}.aliyuncs.com'
bucket_obj = oss2.Bucket(auth, endpoint, bucket)

# 下载图片并上传到阿里云
for image_link in image_links:
    image_name = image_link.split('/')[-1]
    local_path = os.path.join(image_dir, image_name)
    print(local_path)

    # 下载图片
    response = requests.get(image_link)
    with open(local_path, 'wb'as file:
        file.write(response.content)

    # 上传到阿里云
    with open(local_path, 'rb'as file:
        bucket_obj.put_object(image_name, file)

    # 获取上传后的图片链接
    image_url = f'https://{bucket}.{area}.aliyuncs.com/{image_name}'

    # 替换Markdown中的图片链接
    markdown_content = markdown_content.replace(image_link, image_url)

# 保存修改后的Markdown文件
new_markdown_file = '1_updated.md'
with open(new_markdown_file, 'w', encoding='utf-8'as file:
    file.write(markdown_content)

print("图片下载和上传完成,并且Markdown文件已更新。")

你只需要替换你的access_key_idaccess_key_secret、你的bucket的名字以及你的area即可。我默认你需要修改的markdown文件的名字为1.md、修改后的markdown文件名为1_updated.md,你可以自行修改。

如果你和我一样,之前使用的是picgo,那么你可以直接到配置文件中找到以上参数;如果你忘记了你的access_key_idaccess_key_secret,那么你也可以去阿里云oss控制台去增加一个。

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
image-20230614233537170

效果展示

语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
image-20230614233654905
语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床
image-20230614233756958

只能说,又好又好!


原文始发于微信公众号(追梦信安):语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月15日03:42:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   语雀403防盗链解决方法:Python批量转移图片至阿里云oss图床https://cn-sec.com/archives/1808782.html

发表评论

匿名网友 填写信息