#php #curl
#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 => «{ «номер телефона»:»6282818966317″ }»,
Пока что postform.php
вернет ответ, если я добавлю номер телефона вручную. То, что я хочу сделать, CURLOPT_POSTFIELDS
автоматически получит значение из phonenumber
входных данных из HTML-формы.
Комментарии:
1.
"{ "phonenumber":"" . $_POST['phonenumber'] . "",...
должно получиться. Это было то, о чем вы просили?2. Привет, Джефф, Да, я хочу получить входные данные формы в culrpost, я попробовал это, но в ответе появляется ошибка «responseCode»: -2, «ResponseMessage»: «Входные данные недопустимы».
Ответ №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. Кроме того, я предполагаю, что вы также хотите передать первое имя динамически. В этом случае добавьте форму, поданную в ваш html.
2. привет @jddev81, спасибо за предложение, но я получил ответ об ошибке ‘Неожиданный символ (‘}’ (код 125)): ожидаемое значение в [Источник: org.apache.catalina.connector. CoyoteInputStream@526e4938; строка: 1, столбец: 40]’ 🙁
3. @Bireon, я думаю, у меня была синтаксическая ошибка. Смотрите правку.
4. Большое спасибо @jddev81, теперь это работает. Спасибо за помощь.
5. … это требует экранирования, во многом по тем же причинам, по которым вы не можете просто вставлять переменные в SQL-запросы, сначала вам нужно экранировать эти переменные. сделайте это
CURLOPT_POSTFIELDS => json_encode(array("phonenumber"=>$phone,"FullName"=>$fullName))
вместо этого.
Ответ №2:
Почему бы просто не передать все размещенные данные в curl
? Похоже, вам нужно отправить JSON
в конечную точку вашего API, поэтому:
CURLOPT_POSTFIELDS => json_encode($_POST),
Любое поле, которое вы включите в свою форму с помощью name
и value
, будет находиться в _POST
. Просто передайте его в curl
.
Если вам нужно отправить дополнительные поля, которых нет в вашей форме, просто добавьте их в _POST
массив перед отправкой, например:
$_POST['FullName'] = "Jenny Doe";
// ... rest of your code
CURLOPT_POSTFIELDS => json_encode($_POST),
Вы никогда не должны пытаться создавать вручную JSON
, слишком легко допустить ошибки. Просто создайте свой массив и используйте встроенные инструменты.