Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zurmo:Python请求-数据格式_Python_Python Requests - Fatal编程技术网

Zurmo:Python请求-数据格式

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":

我试图使用python脚本将一些数据推送到Zurmo CRM中,但数据格式出现了问题。对于http请求,我使用Python中的请求模块

下面我分别与您分享我的一段代码,其中包含数据和HTTP请求:

数据

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抗争。大部分内容我都很清楚(我甚至直接找到了同一个包),但我缺少了内容类型标题。