一、流程
1. 提供用户名密码,根据用户名密码获取令牌,从而能够读取ArcGIS Server站点的服务
2. 提供ArcGIS Server服务器名称以及要停止或启动服务的文件夹,根文件夹为root
3. 初次请求文件夹中的服务列表时,响应将以 JavaScript 对象表示法 (JSON) 的形式返回。Python 的 json.loads() 函数将 JSON 转换成一个可遍历的 Python 对象。
二、使用
直接在ArcGIS Server的机器上双击
# -*- coding: utf-8 -*-
#启动或者停止文件夹下所有服务
import httplib, urllib, json
import sys
import getpass
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def main(argv = None):
print "Start or Stop service"
#username,password
userName = raw_input("Enter User Name:")
password = getpass.getpass("Enter Password:")
serverName = raw_input("Enter Server Name(IP):")
serverPort = 6080 #10.7开始默认6443,需要在管理员目录开启http
folder = raw_input("Enter the folder name or Root for the root folder:")
stopOrStart = raw_input("Enter whether you want to Start or Stop the services:")
if str.upper(stopOrStart) != "START" and str.upper(stopOrStart) != "STOP":
print "Invalid stop or start!"
return
token = getToken(userName, password, serverName, serverPort)
if token == "":
print "Could not generate a token with the username and password provided."
return
if str.upper(folder) == "ROOT":
folder = ""
else:
folder += "/"
folderURL = "/arcgis/admin/services" + "/" + folder #构造服务rest接口
params = urllib.urlencode({'token': token, 'f': 'json'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
httpConn = httplib.HTTPConnection(serverName, serverPort)
httpConn.request("POST", folderURL, params, headers)
response = httpConn.getresponse()
if (response.status != 200):
httpConn.close()
print "Could not 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)
httpConn.close()
for item in dataobj['services']:
fullservicename = item['serviceName'] + "." + item['type']
print fullservicename
stopOrStartURL = "/arcgis/admin/services/" + folder + fullservicename + "/" + stopOrStart
print stopOrStartURL
httpConn.request("POST", urllib.quote(stopOrStartURL.encode('utf-8')), params, headers)
stopStartresponse = httpConn.getresponse()
if (stopStartresponse.status != 200):
httpConn.close()
print "Error while excuting stop or start. Please check the url and try again!"
return
else:
stopStartdata = stopStartresponse.read()
if not assertJsonSuccess(stopStartdata):
if str.upper(stopOrStart) == "START":
print "Error returned when start service" + fullservicename
else:
print "Error returned when stop services" + fullservicename
print str(stopStartdata)
else:
print "Service " + fullservicename + " processed successfully!"
httpConn.close()
return
def getToken(username, password, serverName, serverPort):
tokenURL = "/arcgis/admin/generateToken"
params = urllib.urlencode({'username': username, 'password': password, 'client': 'requestip', 'f': 'json'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
httpconn = httplib.HTTPConnection(serverName, serverPort)
httpconn.request("POST", tokenURL, params, headers)
response = httpconn.getresponse()
if (response.status != 200):
httpconn.close()
print "Error while attempting to start the services"
return
else:
data = response.read()
httpconn.close()
token = json.loads(data)
return token['token']
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
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
参考:
https://enterprise.arcgis.com/zh-cn/server/
【附录】
欢迎大家关注我的收费课程《ArcGIS Pro 2.6和ArcGIS Enterprise学习》,共8小时,有理论有实操:https://edu.csdn.net/course/detail/31690
课程主要包含:
- ArcGIS Pro2.6学习
①GIS中的数据
②GIS中的坐标系
③企业级地理数据库(SDE)设置
④数据编辑及拓扑检查
⑤简单制图
⑥空间分析
2.ArcGIS Enterprise学习
①环境部署
②二三维服务发布(矢量切片、要素服务、地图切片、地形服务、三维服务等)
③使用及运维(详细介绍如何确定enterprise部署架构,简单介绍相应的运维工具)
3.开发体系梳理