繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM