爱笔记爱笔记

新浪图片403解决办法

年后发现博客的新浪图床翻车了403接下来开整

PHP 代码
新建一个 sina.php 文件放在根目录,然后将以下代码复制进去。

<?php
$url = $_GET["url"];
$dir = pathinfo($url);
$host = $dir['dirname'];
$refer = $host.'/';

$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//激活可修改页面,Activation can modify the page
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

$ext = strtolower(substr(strrchr($img,'.'),1,10));
$types = array(
            'gif'=>'image/gif',
            'jpeg'=>'image/jpeg',
            'jpg'=>'image/jpeg',
            'jpe'=>'image/jpeg',
            'png'=>'image/png',
);
$type = $types[$ext] ? $types[$ext] : 'image/jpeg';
header("Content-type: ".$type);
echo $data;

二。修改图片链接
由于文章基本都是存在于数据库中,这里提供的两种方法都是针对数据库的。

  1. 执行 SQL 语句
UPDATE `typecho_contents` SET `text` = REPLACE(`text`, 'https://ws3.sinaimg.cn', 'https://你的域名/sina.php?url=https://ws3.sinaimg.cn') WHERE `text` LIKE '%https://ws3.sinaimg.cn%'

示例前缀是 ws3,若有其他,自行修改即可。Typecho 用户替换语句中你的域名以及新浪的域名,其他建站系统请自行修改相应的表名及字段。

这里还可能不止一个表中存在新浪图床的图片,例如 Links 插件的 image 字段也有可能出现图片,具体情况,具体分析。

  1. 编辑器替换

或者使用notepad++编辑器用正则替换更精准

https://tv.*?.sinaimg.cn

或者使用EmEditor编辑器用正则替换更精准

此方法简单实用,推荐使用这种方法。

首先将数据库导出,用编辑器打开.sql文件,例如我这里使用 Sublime Text 3,直接按图中替换即可。另外请多查找一下其他二级域名,避免漏网之鱼。

三用python下载图片到本地

import os
os.makedirs('./image/', exist_ok=True)
IMAGE_URL = "https://tva1.sinaimg.cn/large/005E525vgy1h23pdsnatjj30go0b4wfc.jpg"
img_name = IMAGE_URL.split("/")[-1]



def urllib_download():
    from urllib.request import urlretrieve
    urlretrieve(IMAGE_URL, './image/' + img_name)     


urllib_download()

# 新浪图片下载到本地然后在上传替换

后续
不过再怎么说,这也只是一种折中的解决办法。目前新浪的做法已经相当于在警告我们了。新浪完全有权彻底限制外链,如果哪一天真的到来,恐怕又要哀声一片。。。所以我建议趁早撤离新浪图床,使用更专业的图床程序。

来自
zrahh-com/archives/461.html

本原创文章未经允许不得转载 | 当前页面:爱笔记 » 新浪图片403解决办法