Nextcloud批量添加用户(http访问,Python实现)

  • Post author:
  • Post category:python


使用https访问的朋友可能参考这个项目来批量添加用户:https://github.com/t-markmann/nc-userimporter



1.分析

在chrome浏览器打开用户管理页面,右键选择“检查”,切换到Network选项,这里可以看到浏览器请求的各个文件的信息。

在管理用户的页面中添加一个用户testuser09,分组为class01,配额为1GB,请求的数据如下图所示。

添加用户

在Network的文件列表中选择user,如下图所示。

post data

对于我们来说,有用的信息包括:

Request URL

Cookies

Host

requesttoken

Request Payload

如果添加用户成功,服务器会返回一个添加成功的Message。

Response Data.

有了这些关键信息之后我们就可以开始模拟浏览器发送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.如果分组不存在,导入用户会失败,在导入前先添加分组再导入用户。

批量导入用户的效果如下图所示。

在这里插入图片描述



版权声明:本文为Zerotogether原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。