使用https访问的朋友可能参考这个项目来批量添加用户:https://github.com/t-markmann/nc-userimporter
1.分析
在chrome浏览器打开用户管理页面,右键选择“检查”,切换到Network选项,这里可以看到浏览器请求的各个文件的信息。
在管理用户的页面中添加一个用户testuser09,分组为class01,配额为1GB,请求的数据如下图所示。
在Network的文件列表中选择user,如下图所示。
对于我们来说,有用的信息包括:
Request URL
Cookies
Host
requesttoken
Request Payload
如果添加用户成功,服务器会返回一个添加成功的Message。
有了这些关键信息之后我们就可以开始模拟浏览器发送Post请求了。
2.Python模拟浏览器发送Post请求
算法步骤:
从url.txt文件中读取Request URL的值;
从host.txt文件中读取Host的值;
从cookies.txt文件中读取Cookies的值;
从requesttoken.txt文件中读取requesttoken的值;
从users.csv文件中读取要批量添加的用户,文件的格式如下:
每次从csv文件中读取一行数据,然后发服务器发送一个添加用户的请求。
如果要使用本程序,请新建各个文件并填入从浏览器获取的关键参数,文件列表如下所示:
nextcloud_addusers.py的参考代码如下:
from re import findall
from urllib.request import urlopen
import os,requests
import json
import time
def getTxtInfo(filename):
with open(filename, "r") as f:
data = f.readline()
return data
url=getTxtInfo("url.txt")
requesttoken=getTxtInfo("requesttoken.txt")
agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
cookies=getTxtInfo("cookies.txt")
host=getTxtInfo("host.txt")
headers = {
"HOST": host,
"Referer": url,
"User-Agent": agent,
"Cookie":cookies ,
"requesttoken":requesttoken
}
body={"userid":"zsf","password":"45672341","displayName":"张三丰","email":"zzh@qq.com","groups":["class26"],"subadmin":[],"quota":"200MB","language":"en"}
cnt=0
with open("users.csv", "r", encoding='UTF-8') as f:
for line in f.readlines():
line = line.strip('\n') #去掉列表中每一个元素的换行符
cnt=cnt+1
if cnt==1:
continue
temp=line.split(",")
body["userid"]=temp[2]
body["password"]=temp[4]
body["displayName"]=temp[0]
body["email"]=temp[3]
body["groups"][0]=temp[1]
response = requests.post(url, json = body, headers = headers)
if response.text.find("ok")>1:
print(body["userid"]+" added.")
else :
print(body["userid"]+" add failed.")
print (response.text)
#print(temp[1])
注意:
1.管理员的cookies超过一定的时间以后会失效,我分4批导入用户,每批次大概300多人。因为用户数量不多,我也就没花心思去研究了,知道怎么修改cookies有效时间的朋友请在底下留言告知。
每次要导入新的一批的用户之前,先退出管理员账号,重新登录获取Cookies和requesttoken的值,存放到对应的txt文件中,再运行程序。
2.程序里面添加的用户存储空间默认是200MB,可以自行修改程序。
如果不想都设置成一样的存储空间,也可以在”users.csv“文件中增加一列设置存储空间的内容,然后在 body[“groups”][0]=temp[1] 的下面添加一条 body[“quota”]=temp[5] 语句即可。
3.如果分组不存在,导入用户会失败,在导入前先添加分组再导入用户。
批量导入用户的效果如下图所示。