Zurmo:Python请求-数据格式
我试图使用python脚本将一些数据推送到Zurmo CRM中,但数据格式出现了问题。对于http请求,我使用Python中的请求模块 下面我分别与您分享我的一段代码,其中包含数据和HTTP请求: 数据:Zurmo:Python请求-数据格式,python,python-requests,Python,Python Requests,我试图使用python脚本将一些数据推送到Zurmo CRM中,但数据格式出现了问题。对于http请求,我使用Python中的请求模块 下面我分别与您分享我的一段代码,其中包含数据和HTTP请求: 数据: data = { "firstName": "Python", "lastName": "IAmNotBlank", "officePhone": "01254870016", "companyName": "Python Test", "state":
data = {
"firstName": "Python",
"lastName": "IAmNotBlank",
"officePhone": "01254870016",
"companyName": "Python Test",
"state": {
"id": str(1)
},
"owner": {
"id": str(6)
},
"source": {
"value": "Website Form"
},
"primaryEmail": "luis@eazycollect.co.uk",
"sunCstm": {
"value": "I have my own SUN"
},
"averageCstm": "100",
"oftenCstm": {
"value": "Weekly"
},
"ddcustCstm": "100",
"website": "www.google.com"
}
HTTP请求:
headers = {
"Accept": "application/json",
"ZURMO_API_REQUEST_TYPE": "REST",
"ZURMO_SESSION_ID": tokens["sessionID"],
"ZURMO_TOKEN": tokens["token"]
}
r = requests.post(url=zURL+zInstance, data=data, headers=headers)
我还可以与您分享Zurmo开发人员的回复:
出现错误的原因是,您发送到api的数据应该是带有“data”元素的字典,这是我根据错误确定的,因此我认为您应该将代码更改为如下内容:
data=urllib.urlencode({“data”=>zurmo_data})
应该与PHP代码等效:
$response=ApiRestHelper::createApiCall(“”;,'POST',$headers,数组('data'=>$data))
在我的代码中,requests.post()方法已经在对数据进行编码,默认情况下,它执行与urllib.urlencode()相同的工作。如果需要,您可以在以下链接中查看Zurmo API:。他们以PHP为例
最后,我将根据我的请求与您分享服务器响应:
200
{"status":"FAILURE","data":null,"message":"Please provide data.","errors":null}
有人有过同样的经历吗?您应该使用'data'
键创建一个顶级词典:
data = {'data': data}
这是发展商所说的话,;在他们给出的所有PHP示例中,他们使用'data'
键将整个数据
字典包装在这样一个外部字典中
如果Zurmo API希望您对其进行URL编码,那么您必须手动进行URL编码,以实现PHP风格的键。看
您可以使用此处来完成以下任务:
from multidimensional_urlencode import urlencode
headers = {
"Accept": "application/json",
"ZURMO_API_REQUEST_TYPE": "REST",
"ZURMO_SESSION_ID": tokens["sessionID"],
"ZURMO_TOKEN": tokens["token"],
"Content-Type": "application/x-www-form-urlencoded",
}
post_body = urlencode(data)
r = requests.post(url=zURL+zInstance, data=post_body, headers=headers)
由于您自己正在对文章正文进行编码,因此需要手动设置内容类型标题。您应该使用'data'
键创建一个顶级词典:
data = {'data': data}
这是发展商所说的话,;在他们给出的所有PHP示例中,他们使用'data'
键将整个数据
字典包装在这样一个外部字典中
如果Zurmo API希望您对其进行URL编码,那么您必须手动进行URL编码,以实现PHP风格的键。看
您可以使用此处来完成以下任务:
from multidimensional_urlencode import urlencode
headers = {
"Accept": "application/json",
"ZURMO_API_REQUEST_TYPE": "REST",
"ZURMO_SESSION_ID": tokens["sessionID"],
"ZURMO_TOKEN": tokens["token"],
"Content-Type": "application/x-www-form-urlencoded",
}
post_body = urlencode(data)
r = requests.post(url=zURL+zInstance, data=post_body, headers=headers)
因为您自己正在对文章正文进行编码,所以需要手动设置内容类型标题。我并不完全清楚Zurmo希望数据如何编码;如果他们想要URL编码的数据,你还需要在键上做更多的工作,因为PHP有自己专有的编码方式;如果他们想要URL编码的数据,你还需要对键做更多的工作,因为PHP有自己的专有编码方式。更改为带有“数据”键的顶级词典,现在我收到了服务器错误“500”,消息是:发生了错误。请单击eazycollect.zurmocloud.com/crm/app/index.php“>此处继续主页。如果错误仍然存在,请与管理员联系。参数2传递给ZurmoModuleAppIController::setModelScenarioFromData()必须是数组类型,字符串给定,在第619行的/home/eazycoll/public_html/crm/app/protected/modules/zurmo/components/zurmoduleapicontroller.php中调用,并已定义。@LuísSardinha:请参见关于在此处传递多维字典的备注。php(和Ruby on Rails)使用浏览器使用的标准表单编码参数格式的扩展来添加结构,该结构会自动解析回PHP数组(相当于Python dict)@LuísSardinha:那么你现在1)用
'data'
键将原始词典包装在另一个词典中,2)发送编码为多维编码的帖子正文?你能告诉我们实际生成的帖子正文吗?等等,Martijn,很好。抱歉,我没有编码顶级词典,但仍然是原始数据词典y、 它成功了!!非常感谢你,伙计。谢谢你。在过去的两个小时里,我一直在与这个API抗争。我对大部分内容都很清楚(我甚至直接找到了同一个包),但我缺少了内容类型标题。改成了带有“数据”键的顶级字典,现在我遇到了服务器错误“500”“使用此消息:发生错误。请单击eazycollect.zurmocloud.com/crm/app/index.php“>此处继续主页。如果错误仍然存在,请与管理员联系。参数2传递给ZurmoModuleAppIController::setModelScenarioFromData()必须是数组类型,字符串给定,在第619行的/home/eazycoll/public_html/crm/app/protected/modules/zurmo/components/zurmoduleapicontroller.php中调用,并已定义。@LuísSardinha:请参见关于在此处传递多维字典的备注。php(和Ruby on Rails)使用浏览器使用的标准表单编码参数格式的扩展来添加结构,该结构会自动解析回PHP数组(相当于Python dict)@LuísSardinha:那么你现在1)用'data'
键将原始词典包装在另一个词典中,2)发送编码为多维编码的帖子正文?你能告诉我们实际生成的帖子正文吗?等等,Martijn,很好。抱歉,我没有编码顶级词典,但仍然是原始数据词典y、 它成功了!!非常感谢你,伙计。谢谢你。在过去的两个小时里,我一直在与这个API抗争。大部分内容我都很清楚(我甚至直接找到了同一个包),但我缺少了内容类型标题。