如何将值从HTML表单传递到CURLOPT_POSTFIELDS

时间:2019-03-04 22:21:03

标签: php curl

我正在尝试将HTML表单值作为CURLOPT_FIELDS发送。我的HTML表单:

<form class="form-response" method="POST" action="postform.php">
    <h2 class="form-response-heading">get Response</h2>
    <input name="phonenumber" class="form-control" type="text" autofocus="" required="" placeholder="phonenumber">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Get Response</button>
</form>

目前我的postform.php是:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/AccountDetails",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ \"phonenumber\":\"6282818966317\", \"FullName\":\"Jenny Doe\" }",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapikeynumbers",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

我尝试过HTML表单会将值传递到CURLOPT_POSTFIELDS =>“ {\” phonenumber \“:\” 6282818966317 \“}”,

到目前为止,如果我手动添加电话号码,postform.php将返回响应。我想做的是CURLOPT_POSTFIELDS将自动从HTML表单的phonenumber输入中获取值。

2 个答案:

答案 0 :(得分:1)

您需要将值存储在变量中并传递该变量。

//Somewhere up here, store the post data in a variable something like this:
$phone = $_POST['phonenumber'];
$fullName = $_POST['full_name'];

 CURLOPT_POSTFIELDS => "{ \"phonenumber\":\"" .$phone . "\", \"FullName\":\"" . $fullName . "\" }",

我发现将输入存储在变量中使您可以更轻松地使用它们。根据上面的评论,您可能需要查看文档,以查看要连接的API期望什么,并在发送输入之前验证输入是否有效。

答案 1 :(得分:1)

为什么不简单地将所有发布的数据传递到curl?看来您需要将JSON发送到您的API端点,所以:

CURLOPT_POSTFIELDS => json_encode($_POST),

您在表单中包含namevalue的任何字段都将在_POST中。只需将其传递给curl

如果您需要发送的其他字段不在您的表单中,则只需在发送前将它们添加到_POST数组中即可,例如:

$_POST['FullName'] = "Jenny Doe";

// ... rest of your code

CURLOPT_POSTFIELDS => json_encode($_POST),

您永远不要尝试手动构造JSON,这很容易出错。只需创建阵列并使用内置工具即可。