#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-адрес, поэтому я говорю, можете ли вы попробовать один раз с полным URLhttp://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. Ладно, понял. Если решение сработало, пожалуйста, лайкните. Спасибо