【问题标题】:Trying to understand how to format this PHP POST to a Curl POST format试图了解如何将此 PHP POST 格式化为 Curl POST 格式
【发布时间】:2014-08-21 12:08:35
【问题描述】:

我正在通过 curl 与 API 连接并发布到它。

API 支持只是说我应该这样形成我的请求:

“如果您向正确的 URL 发送一个 POST 请求,其内容类型为 JSON,正文如下所示,您应该有一个良好的开端:

 {
   "contact": {
     "email": "justin@myapi.com",
     "last_name": "Johnston",
     "company": "MyApi",
     "first_name": "Justin"
   }
 }

但是,我认为这可能是针对普通的 PHP 帖子,而不是针对我正在使用的 CURL。

所以,我的 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 不正确,并且我知道我需要以“联系人”开头,但我不确定如何格式化它并且无法找到示例。有什么想法吗?

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

克雷格

【问题讨论】:

  • 我认为问题是你发送一个字符串作为参数,它应该是一个 JSON 对象。只需使用 json_encode() 对数据数组进行编码并通过 POST 而不是您正在形成的字符串发送。
  • 看看this是否有帮助。

标签: php post curl


【解决方案1】:

要扩展我发布的评论...

我认为问题在于您发送一个字符串作为参数,其中 它应该是一个 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,这就是为什么这不起作用。

【讨论】:

  • 优秀的答案。可能想向 OP 解释 post 请求和其中包含的 api 请求数据之间的区别。他/她似乎混淆了两者
  • @r3wt 我已经扩展了我的答案以使其更清晰,如果我做得不好,请随时编辑!
  • 好的,这对我有用。我没有设置 JSON 标头类型,所以一旦我添加了它,一切都很好并且设置好了。非常感谢您的帮助!!!
  • @CRAIG 别担心,伙计。希望您现在也能更多地了解 cURL 和 HTTP 请求的工作原理。
  • 我愿意!这很有帮助!
猜你喜欢
  • 1970-01-01
  • 2011-07-10
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-09-15
  • 1970-01-01
相关资源
最近更新 更多