试图了解如何将此PHP POST格式化为Curl POST格式

时间:2014-07-01 02:31:30

标签: php post curl

我通过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不正确,我知道我需要带领"联系",但我不知道如何格式化它并且还没有能够找到一个例子。任何想法?

非常感谢您提供的任何帮助!我真的很感激!!

克雷格

1 个答案:

答案 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,这就是为什么它不起作用。