使用Python 3.x 批量删除ArcGIS Server某一文件夹下的所有服务

以往对于Server的管理大部分是以前Python2.x的版本,但是现在考虑到使用Pro较多,为Python3.x的版本,有一些http连接包的连接代码有一定变化,所以这里对相关的方法进行了整理。

1. 连接server获取token

如果想批量删除服务,则需要先连接到server并获取token。3.x环境下httplib这个包已经没了,所以更换为http.client进行连接,连接方法参考:

python 复制代码
def getToken(username, password,url):
        #urltoken = "http://localhost:6080/arcgis/admin/generateToken"
        params = urllib.parse.urlencode({'username': username, 'password': password, 'client': 'requestip', 'f': 'json'})
        headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain","User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"}
       
        conn = http.client.HTTPConnection(url)
        conn.request('POST', '/arcgis/admin/generateToken', params, headers)

        response = conn.getresponse()
        if (response.status != 200):
            conn.close()
            print("Error: Cannot get token!")
            return
        else:
            data = response.read()
            conn.close()
   
            token = json.loads(data)
            return token['token']

2. 获取文件夹下的服务名

目的是删除某一文件夹下的所有服务,所以需要先获取到该文件夹下有哪些服务,可以参考:

python 复制代码
def assertJsonSuccess(data):
    obj = json.loads(data)
    if 'status' in obj and obj['status'] == "error":
        print("Error: JSON object returns an error. " + str(obj))
        return False
    else:
        return True

def get_services_list(url, token, folder):
        serviceslist = []
        folderURL = "/arcgis/admin/services" + "/" + folder 
        params = urllib.parse.urlencode({'token': token, 'f': 'json'})
        headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
   
        conn = http.client.HTTPConnection(url)
        conn.request('POST', folderURL, params, headers)
   
        response = conn.getresponse()
        if (response.status != 200):
            conn.close()
            print("Cannot read folder information!")
            return
        else:
            data = response.read()
   
            if not assertJsonSuccess(data):
                print("Error when reading the folder information!" + str(data))
            else:
                print("Processing folder information successfully. Now processing services......")
   
            dataobj = json.loads(data)
   
            conn.close()
   
            for item in dataobj['services']:
                fullservicename = item['serviceName'] + "." + item['type']
                print(fullservicename)
                serviceslist.append(fullservicename)
            return serviceslist

3. 批量删除服务

删除服务Rest API相关帮助可以参考官网地址:
https://developers.arcgis.com/rest/enterprise-administration/enterprise/delete-service.htm

删除方法参考:

python 复制代码
def delete_services(full_services_list,folderURL,token):
    for service in full_services_list:
        conn = http.client.HTTPConnection("localhost:6080")

        deleteservice = folderURL+'/'+ service + '/'+ 'delete'

        params = urllib.parse.urlencode({'token': token, 'f': 'json'})
        headers = {"Content-type": "application/x-www-form-urlencoded"}
        conn.request('POST', deleteservice, params, headers)
       
        response = conn.getresponse()
        if (response.status != 200):
            conn.close()
            print("Cannot connect server to delete!")
            return
        else:
             print(response)
             conn.close()
             
             print(service + "has been deleted!")
相关推荐
小小张说故事5 分钟前
Python 中 __new__ 和 __init__ 到底谁才是构造函数?一文讲透区别与 5 个坑
后端·python
言乐614 分钟前
Python实现关税自动计算模型
开发语言·python·django·virtualenv·pygame
伞伞悦读14 分钟前
从零打通 Hermes Agent:Windows + WSL2 + Clash 全链路安装、认证与首次实战
python·语言模型
朝朝辞暮i14 分钟前
C++ 第 14 课:引用 &
开发语言·c++·算法
happylifetree33 分钟前
Python17:核心语法-数据存储与运算-输入与输出
python
梅雅达编程笔记43 分钟前
04-Python CSV数据保存与翻页抓取
开发语言·爬虫·python·pandas·数据采集·csv
C++ 老炮儿的技术栈1 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
估值探索者1 小时前
【Python量化策略实战 #04】Donchian 通道假突破太多?用 ATR 阈值过滤跑通真实突破信号
开发语言·python·接口·api接口·数据api接口·股票数据api接口
个 人 练 习 生1 小时前
C++:模板初阶详解
开发语言·c++·经验分享·学习
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++类继承 — 完整知识点详解(13)
开发语言·c++·学习