115 Cloud / Share
Please read the following notes carefully
This interface is a reverse-engineered interface based on legacy products. The project team will not actively maintain it. Please do not submit any issues regarding fixes or further reverse engineering requests for this driver.
请仔细阅读注意事项
本接口是基于历史产物的逆向接口,项目组不会主动进行维护,请勿针对此驱动提出有关于任何修复或进行进一步逆向行为需求的issue。
115 Cloud
115 个人网盘
视频教程(优先选择文字教程)
视频教程有可能因为时间关系导致部分视频内功能不可用或产生变化
所以推荐优先选择文字教程,当然如果你看不懂文字教程或者嫌麻烦也可以观看视频教程
视频发布时间:2025-07-18
Root folder ID
根文件夹 ID
Open the official website of 115 Cloud and click the string behind the url when you click into the folder you want to set, such as https://115.com/?cid=249163533602609229&offset=0&tab=&mode=wangpan, which is 249163533602609229
打开 115 网盘官网,点击进入要设置的文件夹时点击 URL 中 cid
后面的数字
如 https://115.com/?cid=249163533602609229&offset=0&tab=&mode=wangpan
这个文件夹的 根文件夹ID
即为 249163533602609229
Cookie获取方式
Cookie acquisition method
The following message is displayed when mounting a 115 cloud. This is because 115 has removed the three client applications of Windows, Mac, and Linux
.
{
"state": 0,
"error": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
"errno": 0,
"message": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
"code": 0
}
The cookies you have obtained from these three devices cannot be used. Please obtain the cookies from other devices again to mount them.
挂载115云盘提示如下信息,是因为 115已经下架了 Windows、Mac、Linux
这三个客户端的应用
{
"state": 0,
"error": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
"errno": 0,
"message": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
"code": 0
}
你获取的是这三个设备的Cookie自然就无法使用,请重新获取其它设备的Cookie进行挂载
1. QRCode scanning method login
1. QRCode 扫码方式登录
TIP
Still under active development, please stay tuned!
TIP
开发中, 教程暂未更新, 敬请期待!
2. 手动抓取 Cookie 方式登录
2. Log in by manually grabbing Cookies
The cookie
can be obtained from the browser with your 115 account logined, or packet capture.
TIP
Please note that cookies should not end with ;
.
TIP
注意 Cookie 最后不要有;
。
3. 使用 Python 脚本获取 Cookie
3. Get Cookies Using Python Script
Expand the detailed description to view the tutorial and script source code
Source code from:https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61
展开详细说明进行查看教程和脚本源码
源码来自:https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61
View source
#!/usr/bin/env python3
"扫码获取 115 cookie"
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
__version__ = (0, 0, 2)
__all__ = [
"AppEnum", "get_qrcode_token", "get_qrcode_status", "post_qrcode_result",
"get_qrcode", "login_with_qrcode",
]
if __name__ == "__main__":
from argparse import ArgumentParser, RawTextHelpFormatter
parser = ArgumentParser(description="""\
扫码获取 115 cookie
默认在命令行输出,需要安装 qrcode: pip install qrcode
- https://pypi.org/project/qrcode/
可以指定 -o 或 --open-qrcode 直接打开图片扫码
""", formatter_class=RawTextHelpFormatter)
parser.add_argument("app", nargs="?", choices=("web", "android", "ios", "linux", "mac", "windows", "tv", "alipaymini", "wechatmini", "qandroid"), default="web", help="选择一个 app 进行登录,注意:这会把已经登录的相同 app 踢下线")
parser.add_argument("-o", "--open-qrcode", action="store_true", help="打开二维码图片,而不是在命令行输出")
parser.add_argument("-v", "--version", action="store_true", help="输出版本号")
args = parser.parse_args()
if args.version:
print(".".join(map(str, __version__)))
raise SystemExit(0)
from enum import Enum
from json import loads
from urllib.parse import urlencode
from urllib.request import urlopen, Request
AppEnum = Enum("AppEnum", "web, android, ios, linux, mac, windows, tv, alipaymini, wechatmini, qandroid")
def get_enum_name(val, cls):
if isinstance(val, cls):
return val.name
try:
if isinstance(val, str):
return cls[val].name
except KeyError:
pass
return cls(val).name
def get_qrcode_token():
"""获取登录二维码,扫码可用
GET https://qrcodeapi.115.com/api/1.0/web/1.0/token/
:return: dict
"""
api = "https://qrcodeapi.115.com/api/1.0/web/1.0/token/"
return loads(urlopen(api).read())
def get_qrcode_status(payload):
"""获取二维码的状态(未扫描、已扫描、已登录、已取消、已过期等)
GET https://qrcodeapi.115.com/get/status/
:param payload: 请求的查询参数,取自 `login_qrcode_token` 接口响应,有 3 个
- uid: str
- time: int
- sign: str
:return: dict
"""
api = "https://qrcodeapi.115.com/get/status/?" + urlencode(payload)
return loads(urlopen(api).read())
def post_qrcode_result(uid, app="web"):
"""获取扫码登录的结果,并且绑定设备,包含 cookie
POST https://passportapi.115.com/app/1.0/{app}/1.0/login/qrcode/
:param uid: 二维码的 uid,取自 `login_qrcode_token` 接口响应
:param app: 扫码绑定的设备,可以是 int、str 或者 AppEnum
app 目前发现的可用值:
- 1, "web", AppEnum.web
- 2, "android", AppEnum.android
- 3, "ios", AppEnum.ios
- 4, "linux", AppEnum.linux
- 5, "mac", AppEnum.mac
- 6, "windows", AppEnum.windows
- 7, "tv", AppEnum.tv
- 8, "alipaymini", AppEnum.alipaymini
- 9, "wechatmini", AppEnum.wechatmini
- 10, "qandroid", AppEnum.qandroid
:return: dict,包含 cookie
"""
app = get_enum_name(app, AppEnum)
payload = {"app": app, "account": uid}
api = "https://passportapi.115.com/app/1.0/%s/1.0/login/qrcode/" % app
return loads(urlopen(Request(api, data=urlencode(payload).encode("utf-8"), method="POST")).read())
def get_qrcode(uid):
"""获取二维码图片(注意不是链接)
:return: 一个文件对象,可以读取
"""
url = "https://qrcodeapi.115.com/api/1.0/mac/1.0/qrcode?uid=%s" % uid
return urlopen(url)
def login_with_qrcode(app="web", scan_in_console=True):
"""用二维码登录
:param app: 扫码绑定的设备,可以是 int、str 或者 AppEnum
app 目前发现的可用值:
- 1, "web", AppEnum.web
- 2, "android", AppEnum.android
- 3, "ios", AppEnum.ios
- 4, "linux", AppEnum.linux
- 5, "mac", AppEnum.mac
- 6, "windows", AppEnum.windows
- 7, "tv", AppEnum.tv
- 8, "alipaymini", AppEnum.alipaymini
- 9, "wechatmini", AppEnum.wechatmini
- 10, "qandroid", AppEnum.qandroid
:return: dict,扫码登录结果
"""
qrcode_token = get_qrcode_token()["data"]
qrcode = qrcode_token.pop("qrcode")
if scan_in_console:
try:
from qrcode import QRCode
except ModuleNotFoundError:
from sys import executable
from subprocess import run
run([executable, "-m", "pip", "install", "qrcode"], check=True)
from qrcode import QRCode # type: ignore
qr = QRCode(border=1)
qr.add_data(qrcode)
qr.print_ascii(tty=True)
else:
from atexit import register
from os import remove
from threading import Thread
from tempfile import NamedTemporaryFile
qrcode_image = get_qrcode(qrcode_token["uid"])
with NamedTemporaryFile(suffix=".png", delete=False) as f:
f.write(qrcode_image.read())
f.flush()
register(lambda: remove(f.name))
def open_qrcode():
platform = __import__("platform").system()
if platform == "Windows":
from os import startfile # type: ignore
startfile(f.name)
elif platform == "Darwin":
from subprocess import run
run(["open", f.name])
else:
from subprocess import run
run(["xdg-open", f.name])
Thread(target=open_qrcode).start()
while True:
try:
resp = get_qrcode_status(qrcode_token)
except TimeoutError:
continue
status = resp["data"].get("status")
if status == 0:
print("[status=0] qrcode: waiting")
elif status == 1:
print("[status=1] qrcode: scanned")
elif status == 2:
print("[status=2] qrcode: signed in")
break
elif status == -1:
raise OSError("[status=-1] qrcode: expired")
elif status == -2:
raise OSError("[status=-2] qrcode: canceled")
else:
raise OSError("qrcode: aborted with %r" % resp)
return post_qrcode_result(qrcode_token["uid"], app)
if __name__ == "__main__":
resp = login_with_qrcode(args.app, scan_in_console=not args.open_qrcode)
print()
print("; ".join("%s=%s" % t for t in resp['data']['cookie'].items()))
- You need to install Python 3.11.x or above
- If the QR code cannot be displayed properly in the
CMD
andpowershell
terminals, you can use the-o
parameter to generate an image to scan the code, or you need to install an additional terminal- Use the
-o
parameter to generate the image method and scan the QR code to confirm- python
python main.py wechatmini -o ``` The devices that can be obtained are as follows. If you do not fill in the device, the default device on the `Web` side will be used `Web`,`android`,`ios`,~~`linux`,`mac`,`windows`~~,`tv`,`alipaymini`,`wechatmini`,`qandroid`
alipaymini
andwechatmini
They are Alipay Mini Program and WeChat Mini Program.- Windows、Mac、Linux should not be able to use it anymore. The official client was recently removed from the shelves.
- It is recommended to use some devices that you do not commonly use, otherwise logging in will crowd out the previous ones.
- Additional installation terminal
- Windows Store:https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=zh-cn&gl=CN
- GitHub Download:https://github.com/microsoft/terminal/releases
- Other ways, solve it yourself
- Use the
Execute the command and obtain the QR code. Scan the QR code on the APP to obtain Cookie
- 需要安装 Python 3.11.x 以上版本
- 如果二维码在
CMD
和powershell
两个终端无法显示正常,可以使用-o
参数生成图片的方式来扫码,或者需要额外安装一个终端- 使用
-o
参数,生成图片方式然后扫码确认- python
python main.py wechatmini -o ``` 可以获取的设备有如下,如果不填写设备默认使用的是 `Web` 端的设备 `Web`,`android`,`ios`,~~`linux`,`mac`,`windows`~~,`tv`,`alipaymini`,`wechatmini`,`qandroid`
alipaymini
和wechatmini
分别是支付宝小程序和微信小程序- Windows、Mac、Linux 应该不能使用了,最近官方把客户端下架了
- 建议使用一些自己不常用的设备,否则登录会将之前的挤掉
- 另外安装终端
- 其它方式自行解决
- 使用
执行命令,获取二维码 APP扫码获取 Cookie
3.1. Direct Execution
3.1.直接执行
PS C:\Users\233\Desktop\115> python --version
Python 3.12.2
PS C:\Users\233\Desktop\115> python main.py wechatmini
█▀▀▀▀▀▀▀█▀▀▀▀█▀███▀▀▀█▀█▀▀▀██▀█▀▀▀▀▀▀▀█
█ █▀▀▀█ █ █▀▄▀█▄▀▀█▀█ ▄█▀▀ █▀█ █▀▀▀█ █
█ █ █ █▀█ ▄ ▄▀▄ ▀ ▀▄ █▀▄▀█▀█ █ █ █
█ ▀▀▀▀▀ █▀█ ▄▀▄ ▄ ▄ █ ▄▀▄▀█▀█▀█ ▀▀▀▀▀ █
█▀██▀▀▀▀▀▀▀ ▄█ ▀█ █▀▀▀ █▀ ▄▄▄ ▀██▀█▀▀▀█
██▄▀▀▄▀▀▀▀ ▄██▀▄██▀██▄█ █▀▀▀ ▀▀▀▄▄▀ ▄▀█
█ ▀██▀████ ▀ ▀ ▀ █▀ ▀▀▄▄▀▄ █▄▀▄▄ ▀▀▀█
█ ▄▀▀█▄▀█▀▀██ ▀▀▀▀ ▄▀ ▀███▀██▀▄▀▀▄▄ █
██▄█ ▄▀▀█▄ ▀█▄▀▄▄ █ █▀ ▄▀▀ ▄▀█▀█▀█▀█
███▄ █ ▀ ▀█ █▄ ▀▀▀▀█▀█▀█ ▄▀▀ ▄ █ ██▄█
█ █▀▀▀█ █ ▄▄▀▄▄▀ █▄▄▀█▀ █▀▄█ ▀▀▀ ▀█▀ █
█ █ █ █▄ ▄▀ █▀▀ ▀▄▀▀█▀▀ █ █ ▄█▀▄▄ ▀█
█ ▀▀▀▀▀ █▀ █▄▀ ▀ ▄█▄ █▄▀▀█▄ ▀ ▀▄▄ ▄▄ █
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Execute the command directly. The QR code will appear in the terminal for display.
直接执行 二维码会出现在终端中进行显示
3.2. Using the -o parameter
3.2. 使用-o参数
PS C:\Users\233\Desktop\115> python --version
Python 3.12.2
PS C:\Users\233\Desktop\115> python main.py wechatmini -o
After using the -o
parameter, a QR code image will pop up automatically
使用 -o
参数后会自动弹出一张二维码图片
秒传
Rapid upload
- v.3.27.0 version Enhanced Rapid upload: You can directly upload files with
Alibaba Cloud Disk Open
by copying- The premise is to upload the file from 115 Rapid upload to Alibaba Cloud Disk Open, the file already exists in Alibaba Cloud Disk Open, otherwise it is a normal copy task.
- If you want to transfer 115 cloud disk files to Alibaba Cloud Disk in seconds, you need to turn on the Rapid upload option of Alibaba Cloud Disk, otherwise it will be uploaded in normal mode. If you want to upload files using Miaochuan, it is recommended to build an OpenList locally on your home computer and add a
local storage
and115 cloud disk
to copy Miaochuan to save resources.
- v.3.27.0 版本 增强秒传:可以直接通过复制方式来和
阿里云盘Open
进行相互秒传文件- 前提是要从115秒传到阿里云盘Open的文件,阿里云盘Open已经存在,否则就是正常复制任务。
- 如果将115的文件秒传到阿里云盘,需要将阿里云盘的秒传选项打开否则为正常模式上传 如果要使用秒传来上传文件建议在自己家用电脑本地搭建一个OpenList添加一个
本地存储
和115云盘
进行复制秒传这样节省资源。
离线下载
Offline Download
v3.37.0 and above versions support calling 115 Cloud
offline download function in OpenList Select in the lower right corner and select 115 Cloud
for offline download options
- Support:
magne
,http
,ed2k
links Only 115 Cloud is supported for offline download. If it is not 115 Cloud, the following error message will be displayed, Although the offline download prompt was successfully added, an error will be prompted in the background. - unsupported storage driver for offline download, only 115 Cloud is supported
- Some tips for using 115 offline downloads:
- Out of sync problems may occur (manual refresh in the lower right corner )
- Currently, when the download is successful, completed tasks in the offline list are deleted.
- 115 Task URLs that are already in the offline list cannot be added again.
v3.37.0 及以上版本支持在OpenList调用115离线下载功能 右下角选择 离线下载选项选择115 Cloud
- 支持:
magnet
、http
、ed2k
链接 仅支持使用115个人云盘使用离线下载,非115个人云盘会提示如下错误,虽然添加离线下载提示成功但是在后台会提示错误 - unsupported storage driver for offline download, only 115 Cloud is supported
- 使用115离线下载的一些提示
- 可能会发生不同步的问题(手动右下角刷新 )
- 目前当下载成功后,删除离线列表中完成的任务
- 115已经在离线列表中的任务url不能再次添加
默认使用的下载方式
The default download method used
115 Share
115网盘分享

分享链接ID
^1^ 和 分享链接提取码
^2^ 分别如何获取一目了然

Sharing link ID
^1^ and Sharing link extraction code
^2^ How to obtain them respectively is clear at a glance.
Root folder ID
根文件夹ID
The default is empty and the entire directory file is mounted.
The folder IDs are the root folder ID and the subfolder ID respectively. The following demonstrates how to obtain the shared root folder directory ID
^1^ and other subfolder directory ID
^2^ respectively.
1. shared root folder directory ID
1. 分享根文件夹目录ID
Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
Let’s click on the root folder to enter. There will be a new request on the right, and then select Load
to see the ID (cid) of our folder.

打开开发者模式(F12)先将请求全部清空,我们进入文件夹,先将全部请求清空,
我们再点击根文件夹进入,右侧会有一个新的请求,然后选择载荷
就能看到我们的这个文件夹的ID (cid)

2. other subfolder directory ID
2. 其它子文件夹目录ID
打开开发者模式(F12)先将请求全部清空,我们进入文件夹,先将全部请求清空,
右侧会有一个新的请求,然后选择预览
然后进行展开查看,就可以看到其它子文件夹的ID (cid)

Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
There will be a new request on the right, then select Preview
and expand it to see the IDs (cid) of other subfolders.

错误提示
Error Tips
For example, the 115 sharing link shown in the picture below has expired, but the sharing link can still be opened.

But when adding and saving, the following error code will appear:
Failed init storage but storage is already created: failed init storage: failed to get share snap: json: cannot unmarshal number into Go struct field .data.shareinfo.share_state of type string
例如下图所示的115分享链接分享过期,但是分享链接还能打开

但是在添加保存时候会出现如下错误码:
Failed init storage but storage is already created: failed init storage: failed to get share snap: json: cannot unmarshal number into Go struct field .data.shareinfo.share_state of type string