以往对于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!")