我通过curl和POST连接到API。
API支持只是说我应该如此形成我的请求:
"如果你发送一个POST请求到一个内容类型为JSON的正确网址,以及下面的内容,你应该有一个良好的开端:
{
"contact": {
"email": "justin@myapi.com",
"last_name": "Johnston",
"company": "MyApi",
"first_name": "Justin"
}
}
但是,我认为这可能是普通的PHP帖子,而不是我正在使用的CURL。
所以,我的卷曲代码是:
//Set Curl options
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "first_name=" . $db->f('fname') . "&last_name=" . $db->f('lname') . "&email=" . $db->f('Email') . "&company=" . $db->f('studio_name') . "");
然而,当我运行POST时,我从API返回的响应说:
{"error":"Invalid parameters. Should be a hash in the form { 'contact' : { } }."}
所以,我假设这是因为我的POSTFIELDS不正确,我知道我需要带领"联系",但我不知道如何格式化它并且还没有能够找到一个例子。任何想法?
非常感谢您提供的任何帮助!我真的很感激!!
克雷格
答案 0 :(得分:2)
扩展我发布的评论......
我认为问题是你发送一个字符串作为参数,在哪里 它应该是一个JSON对象。只需使用
json_encode()
来编码 数据数组并通过POST发送,而不是你的字符串 形成
您需要创建一个JSON字符串(通常通过编码数据数组):
$data = array(
"contact" => array(
"first_name" => $db->f('fname'),
"last_name" => $db->f('lname'),
"email" => $db->f('Email'),
"company" => $db->f('studio_name')
)
);
$data = json_encode($data);
这将为您提供您需要发布的JSON,因此只需更改您的代码行,将参数设置为:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
修改:根据评论中的要求,我会尝试解释一下:
POST请求被发送到服务器,您可以使用请求发送所需的任何数据。在问题中给出的示例中,这是有效的JSON,并且他们已经指定请求的主体也应该是JSON(我假设采用相同的格式):
{
"contact": {
"email": "justin@myapi.com",
"last_name": "Johnston",
"company": "MyApi",
"first_name": "Justin"
}
}
在上面的解决方案中,我已经解释了如何获取包含有效JSON的字符串以获取数据数组;此字符串可以作为请求的内容发送。 你所尝试的问题是整个数据实际上都是这样发送的:
first_name=Justin&last_name=Johnston&email=justin@myapi.com&company=MyApi
混淆是可以理解的,因为这是从HTML表单中获取数据的方式,这是通过POST发送变量的常用方法。但是在这种情况下,您需要使用JSON,这就是为什么它不起作用。