Python 使用POST方法对ArcGIS Server REST API进行批量地理编码?

Python 使用POST方法对ArcGIS Server REST API进行批量地理编码?,python,rest,post,geocoding,arcgis-server,Python,Rest,Post,Geocoding,Arcgis Server,我正在尝试访问我的地理编码服务器的REST API: [(ArcGIS服务器10.6.1) …使用POST方法(顺便说一句,可以使用一两个示例,似乎只有关于何时使用POST的非常简短的“注意事项”,而不是如何使用:) 我正在尝试使用requests.post(),我想我已经设法让令牌被接受了,等等,但是我一直收到400个错误 根据以前的经验,这意味着数据的格式不好,但是我直接从Esri支持站点(这个测试对)剪切粘贴了数据 #导入请求库 导入请求 #多地址记录 地址={ “记录”:[ { “属性”

我正在尝试访问我的地理编码服务器的REST API:

[(ArcGIS服务器10.6.1)

…使用POST方法(顺便说一句,可以使用一两个示例,似乎只有关于何时使用POST的非常简短的“注意事项”,而不是如何使用:)

我正在尝试使用requests.post(),我想我已经设法让令牌被接受了,等等,但是我一直收到400个错误

根据以前的经验,这意味着数据的格式不好,但是我直接从Esri支持站点(这个测试对)剪切粘贴了数据

#导入请求库
导入请求
#多地址记录
地址={
“记录”:[
{
“属性”:{
“目标”:1,
“街道”:“纽约街380号”,
“城市”:“红土”,
“区域”:“CA”,
“ZIP”:“92373”
}
},
{
“属性”:{
“目标”:2,
“街道”:“世界一路”,
“城市”:“洛杉矶”,
“区域”:“CA”,
“ZIP”:“90045”
}
}
]
}
#参数
#地理编码器端点
URL='1〕https://locator.stanford.edu/arcgis/rest/services/geocode/USA_StreetAddress/GeocodeServer/geocodeAddresses?'
#locator.stanford.edu/arcgis/tokens中的令牌
mytoken=
#输出空间参考id
outstrid=4326
#输出格式
格式='pjson'
#要发送到api的参数数据
params={'outSR':outstrid,'f':format,'token':mytoken}
#使用POST批处理地理代码
r=requests.post(url=url,data=address,params=params)
打印(r.json())
打印(右文本)
以下是我一直得到的:

{'error': {'code': 400, 'message': 'Unable to complete operation.', 'details': []}}

我不得不花了比我想承认的时间更长的时间来处理这个问题,但技巧(我猜)是使用正确的请求头,并使用
JSON.dumps()
将原始地址转换为JSON字符串

导入请求
导入json
url='1〕http://sampleserver6.arcgisonline.com/arcgis/rest/services/Locators/SanDiego/GeocodeServer/geocodeAddresses'
headers={'Content-Type':'application/x-www-form-urlencoded'}
addresses=json.dumps({'records':[{'attributes':{'OBJECTID':1,'SingleLine':'2920 Zoo Dr'}}]})
r=requests.post(url,headers=headers,data={'addresses':addresses,'f':'json'})
打印(右文本)

如果有人想尝试访问一个不受密码保护的服务:就是这样!@Esri需要更好地记录他们的REST API。完全公开,我发现这一点的方法是使用Charles/Fiddler将失败的python请求与直接在浏览器中发出的成功请求进行比较。此外,服务器对re有点挑剔gard to header另一部分只是一般的python内容,而不是特定于“Esri”的内容。几年前pat向我提到,他希望在每个REST文档页面中包含几种语言的代码片段,但这很难让每个人都满意。例如,其他人可能希望看到2.x代码片段。