PHP cURL публикует поля из пользовательского ввода

#php #forms #elasticsearch #curl

#php #формы #эластичный поиск #локон

Вопрос:

Моя проблема заключается в следующем У меня есть веб-форма HTML

 lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt;  lt;titlegt;FORMlt;/titlegt; lt;bodygt;  lt;form action="/form/send/alex.php" method="post" gt;  Name: lt;input type="text" name="name" value="name"gt;lt;brgt; E-mail: lt;input type="text" name="email" value="email"gt;lt;brgt; lt;input type="submit"gt;    lt;/formgt;  lt;/bodygt; lt;/htmlgt;  

И я хочу загрузить/отправить пользовательский ввод в Elasticsearch с помощью php curl, но это не работает 🙁 и я не знаю, как это сделать в веб-форме. Если я изменю curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // input fileds «с curl_setopt($ch, CURLOPT_POSTFIELDS, "n{n "@timestamp": "2021-11-29T08:21:15.000Z",n "message": "monday"n}n"); «, это работает, но это жесткий код, и я хочу вставить пользовательский ввод.

Теперь это бэк-энд конде:

 lt;?php  // THIS ARRAY CONTAINS THE INPUT FIELDS DATA $data = array(  "name" =gt; "",  "email" =gt; "" );     // START THE CURL PROCESS $ch = curl_init(); // initialize   curl_setopt($ch, CURLOPT_URL, 'ip/index/_doc?pretty'); // form location url curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); // form method curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // input fileds  $headers = array(); $headers[] = 'Content-Type: application/json'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  $result = curl_exec($ch); if (curl_errno($ch)) {  echo 'Error:' . curl_error($ch); } curl_close($ch); ?gt;  

Ошибка, которую я получаю,-это тайм-аут шлюза 504

Спасибо за ваше время и помощь, Алекс

Комментарии:

1. Можете ли вы попробовать один раз с полным URL CURLOPT_URL -адресом ?

2. Я действительно поместил туда полный URL-адрес, он работает, но только с жестко закодированным вводом 🙁

3. Вы используете ip/index/_doc?pretty этот URL-адрес, поэтому я говорю, можете ли вы попробовать один раз с полным URL http://example.com/ip/index/_doc?pretty -адресом, как это. Просто example.com замените своим именем хоста, например localhost , или чем-то другим. Потому что ЗАВИТОК не может быть обнаружен автоматически, поэтому вам следует попробовать один раз.

4. В вашей «рабочей» версии вы отправляете JSON. curl_setopt($ch, CURLOPT_POSTFIELDS, $data); — здесь $данные сами по себе волшебным образом не превратятся в JSON.

5. @CBroe рабочая версия такова : lt;?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'ip:port/remote/_doc?pretty'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "n{n "@timestamp": "2021-11-29T08:21:15.000Z",n "message": "monday"n}n"); $headers = array(); $headers[] = 'Content-Type: application/json'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } curl_close($ch);

Ответ №1:

Если вы будете использовать curl_setopt($ch, CURLOPT_URL, 'ip/index/_doc?pretty'); , то он выдаст ошибку Error: Could not resolve host: ip , потому что предполагает, что имя хоста ip/ такое, что вы должны использовать HOST/URL как http://yourhost.com/ip/index/_doc?pretty . Вы можете посмотреть код, которым я только что заменил URL, google.com и он работает нормально, потому что хост теперь доступен.

 lt;?php  // THIS ARRAY CONTAINS THE INPUT FIELDS DATA $data = array(  "name" =gt; "",  "email" =gt; "" );  // START THE CURL PROCESS $ch = curl_init(); // initialize   curl_setopt($ch, CURLOPT_URL, 'http://google.com'); // form location url curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); // form method curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // input fileds  $headers = array(); $headers[] = 'Content-Type: application/json'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  $result = curl_exec($ch); if (curl_errno($ch)) {  echo 'Error: ' . curl_error($ch); } else {  echo 'Form submitted successfully'; }  curl_close($ch);  ?gt;  

Комментарии:

1. Эй @Sateesh, спасибо за ответ, но термин «ip» в названии curl_setopt($ch, CURLOPT_URL, 'ip/index/_doc?pretty'); не является именем моего dns, я просто сменил реальный хост на «ip», я не хотел публично делиться местом назначения.

2. Ладно, понял. Если решение сработало, пожалуйста, лайкните. Спасибо