【问题标题】:How to make and pass an object with multiple keys into a php curl http post如何使用多个键创建对象并将其传递到 php curl http 帖子中
【发布时间】:2017-12-20 21:33:32
【问题描述】:

作为前提,我使用 nodejs 为我公司的一个门户网站编写了一堆端点。现在我必须在我们的另一个门户中创建相同的功能,但是这个门户是用 php 构建的......而且我对 php 非常陌生。

我有什么工作,但它看起来很草率,我最终不得不在端点做一些字符串操作来得到我需要的东西。另外,我很确定我没有按照我应该的方式使用 curl。任何帮助将不胜感激。

这就是我所拥有的

$params = array('userID' => $userID, 'UnitID' => $unitid);
foreach ($params as $key => $value) {
    $params .= $key . "=" . $value . "&";
}

$url = 'https://10.4.2.31:4000/api/TestCurl/' . $params;

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_POST,2);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params);
$result = curl_exec($ch);
print $result;
curl_close($ch);

我在节点中得到的结果的一个例子是

{params: 'ArrayuserID=12345678&UnitID=ABC1234&'}

我的测试端点看起来像这样

app.post('/api/TestCurl/:params', UserCtrl.TestCurl);

【问题讨论】:

  • 提示:json_encode 非常适合编码数据树。
  • 你的 curl 说的是你的帖子,但是参数在 url 中?那你想要哪个?
  • @rtfm 无论哪种方式最干净都是首选。你会怎么做?
  • POST 用于发布数据,是“标准”;但我不清楚如果您从 API 中检索,那么您应该使用 GET
  • 我将使用参数“$params”发布。目前,我只是在测试 curl 以查看是否可以正确传递节点所需的数据。所以当我到达真正的终点时,我知道它会起作用:)

标签: php node.js curl


【解决方案1】:

您可以使用http_build_query() 将数组转换为curl 使用的格式。

对于 POST 请求:

$params = array('userID' => $userID, 'UnitID' => $unitid);
$fields_string = http_build_query($params);
// ...
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

您给出输出的原因是您将$params 定义为一个数组,然后在foreach 循环内将其连接为一个字符串。如果您在循环中使用不同的变量名,您的方法将有效。

【讨论】:

  • 我试过了,它仍然不会将用户 ID 和 UnitID 传递给节点。我能够做到这一点的唯一方法是通过 url 传递参数。但这对我来说只是草率。我不知道节点是否以某种方式看不到它,或者我的 curl 代码是否错误。 ://
  • 我还尝试在循环中更改变量的名称,但仍然得到“{params: 'ArrayuserID=12345678&UnitID=ABC1234&'}”作为我的 req.params 值。
  • 我明白你现在在说什么了。当使用不同的变量时,它摆脱了“数组”和我的 req.params 的开头。它仍然不是我理想的做法,但这解决了它的“阵列”部分哈哈。谢谢!
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多