ArcGIS Server 完全通过向 ArcGIS REST API 发送的 Web 服务请求进行管理。(即使在使用 ArcGIS Server Manager 来管理服务器时,对 REST API 的调用仍可在后端进行。) 要编写管理 ArcGIS Server 的脚本,需要选择一种可以构建 URL、进行 HTTP 请求和解析 HTTP 响应的脚本语言。本帮助系统中的示例使用的是 Python。
要特别注意,使用 ArcGIS REST API 不要求运行脚本的计算机上安装有 Esri 软件。仅需提供能够对 GIS 服务器进行 HTTP 请求的环境。
注:
单击 ArcGIS REST API 参考的 Web 版本概述。
使用 ArcGIS REST API 管理服务器入门
要使用 REST API,需为待执行的操作创建 HTTP 请求并包括该操作所需的参数;例如,以下 HTTP 请求将一台新计算机加入您的站点:
http://gisserver.domain.com:6080/arcgis/admin/machines/registermachineName=GISSERVER1.DOMAIN.COMadminURL=http://GISSERVER1.DOMAIN.COM:6080/arcgis/admin
熟悉可用的管理操作及其所需参数的一个简单的方法是使用 ArcGIS Server 管理员目录。
使用管理员目录
ArcGIS Server 管理员目录是一款可帮助您为 ArcGIS Server 的管理编写脚本的 Web 应用程序。管理员目录通常位于 http://gisserver.domain.com:6080/arcgis/admin。
可将管理员目录视为通过 REST API 显示的 ArcGIS Server 资源的道路地图。您可以导航管理员目录中的链接以了解在管理 Web 服务请求中要使用哪些 URL 和参数。然后,您可以对这些请求进行格式化并使用所选择的脚本语言通过 HTTP 发送请求。
尝试使用管理员目录执行管理任务。记下您需要输入的参数,并在对服务器进行请求时检查浏览器地址栏中的 URL。查看请求和响应的完整内容时,可能会用到 Web 开发者工具(例如 Fiddler 或 Firebug)。当尝试通过 Python 或其他脚本语言构建您自己的管理 HTTP 请求时,此信息尤其重要。
尽管您可以交互使用管理员目录来实际执行管理任务,但此 Web 应用程序最好用作学习工具来帮助您熟悉 REST API。ArcGIS for Server 管理专用的 Web 应用程序是 ArcGIS Server Manager。
在脚本中获取和使用令牌
不论何时登录到 Manager 或管理员目录,都需要提供具有 ArcGIS Server 管理或发布者权限的帐户的用户名和密码。同样的概念也适用于编写脚本时。需通过编程的方式将用户名和密码提交到服务器。服务器将返回一个令牌(即一个特殊的字符串),以向服务器证明您具有执行某些类型的操作的权限。对服务器进行的任何 Web 服务请求中都必须包含此令牌。
令牌不会永远有效;它具有超时设计,以防被恶意用户偷窃并无限期使用。每次运行脚本时(但并非每次进行请求时),必须请求一个新令牌。
可通过以下 Python 函数请求令牌。服务器名称、端口号、用户名和密码将作为参数提供。
从 ArcGIS Server 请求管理令牌。
def getToken(username, password, serverName, serverPort):
# Token URL is typically http://server[:port]/arcgis/admin/generateToken
tokenURL = "/arcgis/admin/generateToken"
# URL-encode the token parameters:-
params = urllib.urlencode({'username': username, 'password': password, 'client': 'requestip', 'f': 'json'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
# Connect to URL and post parameters
httpConn = httplib.HTTPConnection(serverName, serverPort)
httpConn.request("POST", tokenURL, params, headers)
# Read response
response = httpConn.getresponse()
if (response.status != 200):
httpConn.close()
print "Error while fetch tokens from admin URL. Please check the URL and try again."
return
else:
data = response.read()
httpConn.close()
# Extract the token from it
token = json.loads(data)
return token['token']
使用请求和响应
要进行 ArcGIS Server 的 Web 服务请求,需要格式化要进行的操作的 URL 以及该操作所需的参数。与上文所生成令牌类似的令牌是受保护服务器需要的一个参数。
所有管理操作都会生成一个 Web 服务响应,通常以“JavaScript 对象标记法”(JSON) 格式请求。脚本语言(例如 Python)具有可以解析或读取 JSON 响应的库。有时,只需要获取 HTTP 状态代码来查看请求是否成功(例如,代码 200 表示正常)。但在其他时候,响应可能包含您希望进一步解析和检查的数据(如日志消息)。
要了解如何以编程方式向 ArcGIS Server 发送请求以及如何处理响应,请参阅本帮助手册中的多个代码示例。