[英]Trying to understand how to format this PHP POST to a Curl POST format
我正在通过curl和POST与其连接。
API支持只是说我应该这样构成我的请求:
“如果您将POST请求发送到内容类型为JSON且内容如下的正确URL,则应该是一个好的开始:
{
"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不正确,并且我知道我需要以“ Contact”开头,但是我不确定如何格式化它,并且无法找到示例。 有想法吗?
非常感谢您提供的任何帮助! 我真的很感激!!
克雷格
为了扩大我发表的评论...
我认为问题在于您正在发送一个字符串作为参数,它应该是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,这就是为什么它不起作用的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.