Closed rapava closed 7 years ago
I usually setting up moodle and om on different servers, everything works as expected ....
I can't double-check right now due to vacation Can it be the problem with port forwarding?
No, it can not be port forwarding. I tried to adjust Openmeetings and Moodle on two different servers in two different local networks and everything worked perfectly. The problem only occurs when I install Moodle on server of my ISP. I think that the problem in version libсurl library. What is the minimum version required for proper operation of the script?
I can't check it right now due to vacation Sorry
Добрый день! Я так понял, Вы по русски тоже общаетесь, и мне так проще. Я продолжаю бороться с проблемой состыковки Moodle и Openmeetings.
Установил Moodle с плагином на другом linux-сервере, но проблема осталась. Там PHP 5.4.45, curl 7.36.0. Openmeetings я ставлю на windows7-машину в локальной сети, причем пробовал на 2-х разных компьютерах в разных локалках.
Если на одном из них ставлю Moodle, а на другом OM, то все работает. Или, если все ставлю на одной машине, тоже все работает. Не работает только, если Moodle ставлю на хостинг провайдеров. (А это для меня важно, т.к. windows-машины не всегда включены). Может дело в настройках .htaccess и каких-то настройках apache у провайдера?
Погуглил проблемы с curl, думаю дело в том, что при коннекте OM и Moodle происходит какой-то редирект POST-запроса от OM-plugin, настроенный провайдером. Из-за него POST-метод, сбрасывается в GET - и данные теряются, и OM - не принимает этот метод для передачи hash-а. В функции call параметр CURLOPT_FOLLOWLOCATION => true, я так понимаю, должен решать проблему с редиректом, но, видимо не решает. После вызова $response = curl_exec($session); переменная $response - пустая.
Если же я ставлю CURLOPT_FOLLOWLOCATION => false, то во фрейме OM выскакиевает cообщение об ошибке "Нет таких доступных комнат. Событие в календаре и присоединённая комната уже удалены!", а переменная $response после вызова curl_exec($session); содержит {"serviceResult":{"code":0,"message":"46cdcc35-400f-404b-83fd-2d1afd4e6ad7","type":"SUCCESS"}}
На большее меня не хватает. Помогите, пожалуйста. (На программиста я учился 12 лет назад, PHP вообще не изучал, а работаю все последующее время дизайнером интерьера, так что моих знаний, чтобы самостоятельно все протестировать маловато)
ну у меня всё работает на тех опциях CURL что в исходниках: https://github.com/openmeetings/openmeetings-moodle-plugin/blob/master/api/OmRestService.php#L51
ubuntu 16.04 latest+nginx+php 7.0.8+curl 7.47.0 работало и на более старых версиях без проблем
когда-то были проблемы с апачем (в настройках было запрещено посылать запросы на внешние сайты)
для разборок можно вот тут https://github.com/openmeetings/openmeetings-moodle-plugin/blob/master/api/OmRestService.php#L89 добавить
echo("<pre>");
var_dump($err);
var_dump($errmsg);
var_dump($info);
exit(0);
получилось что-нибудь?
Здравствуйте, Максим.
Я в отпуске. Через пару дней вернусь, попробую. Спасибо.
Thursday, November 3, 2016, 5:03:28 AM, вы писали:
получилось что-нибудь? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.
С наилучшими пожеланиями, Павел, руководитель дизайн-студии "Интерьер-Идея". Тел.: +38-097-744-08-67 ICQ: 177545092 Skype: rapava1980 Почта: iidea@ukr.net Сайт: i-idea.com.ua
Если я вставляю этот кусок кода в указанное место, то он никогда не срабатывает. Видимо условие if ($response === false) никогда не истинно. Если же я вставляю код до или после if, то в выводе "NULL, NULL, NULL". Ошибка остается.
Напишу админу хостинга на счет запрета посылать запросы на внешние сайты. Скорее всего именно из-за этого, посланный POST-ом из плагина запрос каким-то чудом появляется в логах OM как GET-запрос. Можете уточнить какие настройки apache необходимо сделать?
На вопрос о запрете апачу посылать POST-запросы на другие сервера хостер ответил: "Впервые слышу - зачем нам ограничивать запросы, кроме крайних случаев типа вирусной активности на сайте? Дайте пример запроса curl'ом на Ваш сервер - я в командной строке выполню запрос, чтобы увидеть каков будет ответ." Можете подсобить, дать кусок этого кода?
ну вот тут есть какие-то примеры: http://openmeetings.apache.org/RestAPISample.html пойдут такие?
Думаю, нет. Хостмастер же не программист. Ему нужен пример запроса, который он может запустить из шелл, к моему серверу с ОМ. Ну, накрайняк, думаю, сойдет и PHP-код чистого запроса к серверу ОМ. Чтобы можно было его запустить и тут же посмотреть логи апача. Чтобы он увидел, что в запросе действительно написано POST.
ну я на чистом curl запросов делать не умею :( (у меня на чтение манов полдня уйдёт) можно взять простой JSON запрос (типа вот такого [1]) и представить "правильным" способом
Я в тупике: ни я не понимаю, как это сделать, ни хостмастер, ни Вы не хотите разбираться. Я еще на одном сервере (хостинг svai.net) мудл с Вашим плагином попробовал поставить - та же ошибка. Неужели ни у кого больше не возникает аналогичных проблем? Может, пожалуйста, все таки почитаете маны и дадите текст запроса курл на шелле для проверки?
вот такая комманда:
curl -X POST https://om.alteametasoft.com/openmeetings/services/group/?sid=xxx-xxx-xxxx-xxxxx&name=test
даёт вот такой результат: {"serviceResult":{"code":-26,"message":"Insufficient permissions","type":"ERROR"}}
если POST заменить на GET будет многа букв
Здравствуйте, Максим.
В случае моего сервера выдает аналогичный ответ. Лог ОМ тоже видит и POST и GET запросы. Т.е. как мы их отправляем, так они и приходят. Почему же тогда при отправке из PHP-скрипта плагина запрос в ОМ приходит как GET...
Я правильно понимаю?:
Curl Post-ы посылать умеет. Значит все таки апач как-то их меняет.. ведь при команде из шелл он не участвует.
Может все таки в httpd.conf что-то есть по этому поводу или в каком-нить .htaccess?
В .htaccess на моем сервере с мудл вот это:
"
Monday, November 7, 2016, 4:21:34 PM, вы писали:
вот такая комманда: curl -X POST https://om.alteametasoft.com/openmeetings/services/group/?sid=xxx-xxx-xxxx-xxxxx&name=test даёт вот такой результат: {"serviceResult":{"code":-26,"message":"Insufficient permissions","type":"ERROR"}} если POST заменить на GET будет многа букв — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.
С наилучшими пожеланиями, Павел, руководитель дизайн-студии "Интерьер-Идея". Тел.: +38-097-744-08-67 ICQ: 177545092 Skype: rapava1980 Почта: iidea@ukr.net Сайт: i-idea.com.ua
я про .htaccess особо ничего не знаю, особо не пользовался никада ну раз чистый curl работает
то можно сперва дёрнуть то же самое из PHP потом то же самое через OM PHP API (папка api плагина)
Здравствуйте, Максим.
Понимаю, что наглею. Но в PHP я ноль. Хостмастер чистый курл проверил; я вижу, что через OM PHP API ошибка. Нужно промежуточный вариант проверить - написать простой POST запрос из PHP. Можете черкнуть то же самое в PHP? Спасибо.
Monday, November 7, 2016, 5:56:49 PM, вы писали:
я про .htaccess особо ничего не знаю, особо не пользовался никада ну раз чистый curl работает то можно сперва дёрнуть то же самое из PHP потом то же самое через OM PHP API (папка api плагина) — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.
С наилучшими пожеланиями, Павел, руководитель дизайн-студии "Интерьер-Идея". Тел.: +38-097-744-08-67 ICQ: 177545092 Skype: rapava1980 Почта: iidea@ukr.net Сайт: i-idea.com.ua
ну то есть PHP запрос через OM API работает на локальных серверах работает curl запрос из command line но не работает с Ваших хостингов
может у вашей поддержки спросить вот про эти [1] опции curl? их может подпилить?
[1] https://github.com/openmeetings/openmeetings-moodle-plugin/blob/master/api/OmRestService.php#L52
Здравствуйте, Максим.
Monday, November 7, 2016, 6:14:22 PM, вы писали:
ну то есть PHP запрос через OM API работает на локальных серверах
да
работает curl запрос из command line
да, на сервере хостера так работает
но не работает с Ваших хостингов
да, из PHP на сервере хостера не работает (причем на 2-х разных хостингах)
может у вашей поддержки спросить вот про эти [1] опции curl? их может подпилить? [1] https://github.com/openmeetings/openmeetings-moodle-plugin/blob/master/api/OmRestService.php#L52
уже писал хостмастеру, про возможные редиректы из-за которых POST меняется на GET (где-то вычитал такую проблему curl'a) Если CURLOPT_FOLLOWLOCATION => false то ошибка меняется на "There is no such room available...." в самом фрейме ОМ.
А просто написать хостмастеру "подпилить" - эффекта будет 0. Нужно написать маленький php-скрипт, в котором четко видно, что посылаем POST. Хостмастер не верит мне, что скрипт посылает POST, тогда как логи ОМ получают GET. Думает, что проблема в самом PHP.
Напишите, пожалуйста.
С наилучшими пожеланиями, Павел, руководитель дизайн-студии "Интерьер-Идея". Тел.: +38-097-744-08-67 ICQ: 177545092 Skype: rapava1980 Почта: iidea@ukr.net Сайт: i-idea.com.ua
Доброго дня и хорошего настроения! Спасибо за Вашу помощь и поддержку. Вы мне черкнете PHP-скрипт, или мне садиться за изучение PHP?
что-то типа такого https://gist.github.com/solomax/f5bc9433e41ec30c2ac384e7c483d3a5
Большое спасибо за скрипт. Хостмастер удивляется, что при его запуске апач все равно фиксирует исходящий запрос как GET (как и я вижу в логах ОМ). Говорит, что апач сам не может как-то подменять метод и ничего специально в httpd.conf или .htaccess он не прописывал и не запрещал исходящие POST на сторонние сервера. Я грешу все таки на старую версию библиотеки для PHP libcurl, которая "не умеет" отправлять POSTы через веб-сервер (хотя это тоже странно). Но обновить хостер ее не может, что-то там не сростается. Можете сориентировать, из Вашего опыта, на какой версии Curl все исправно работало? Я на другом хостинге пробовал, там кажется 1.36, и ошибка была та же. Или, может, у Вас еще есть какие-то мысли на счет моей проблемы?
я что будет если добавить
$options[CURLOPT_CUSTOMREQUEST] = "POST";
Это никак не влияет. Но, если я меняю CURLOPT_FOLLOWLOCATION => false, то в браузер приходит короткий ответ: {"serviceResult":{"code":-26,"message":"Insufficient permissions","type":"ERROR"}}bool(true) Значит апач обрабатывает этот запрос как POST. Я не понимаю, о каком редиректе здесь идет речь, но читал, что с curl-ом есть такая проблема. Думаю, это как раз моя ситуация. Вот, что мне попадалось на эту тему: https://evertpot.com/curl-redirect-requestbody/ Поэтому я сразу и начал Вам писать про версию Curl, в надежде, что в новой версии это пофиксили.
ну ровно по этой ссылке написано
To fix this, all you have to do is use CURLOPT_CUSTOMREQUEST instead of CURLOPT_POST
так что надо одну строку выкинуть $options[CURLOPT_POST] = true;
а другую вставить $options[CURLOPT_CUSTOMREQUEST] = "POST";
Я это пробовал и сегодня, и еще до того, как Вам первый раз написал. Этого мало.
вот тут http://php.net/manual/en/function.curl-setopt.php есть опция CURLOPT_HTTPGET может её в false выставить?
Не помогает. Думаю, изначально curl и отправляет POST, но потом происходит какой-то редирект (это подтверждает изменение метода при переключении опции CURLOPT_FOLLOWLOCATION), и метод сбрасывается на GET. Для чего эта опция выставляется в true? где происходит этот редирект?
redirect'ы происходят как-то сами (в коде ничего такого нет) в true выставляется чтобы redirect'ы на работу не влияли
В общем, мы с хостером в тупике. Я считаю, что виной всему версия curl. Можете сориентировать, из Вашего опыта, на какой версии Curl все исправно работало? Может, я найду хостинг с более поздней версией и попробую еще на нем, чтоб проверить. Иначе, тему можно закрывать.
может проблема в версии PHP? у меня сейчас только сервер с 7.0 (php && php-curl)
вроде раньше на 5м PHP работало, но проверить мне сейчас не на чём
Сейчас на обоих тестовых серверах с Мудл PHP Version 5.4.45
Нашел новый хостинг с PHP 7.0, поставил Мудл, плагин. При добавлении элемента ОМ в курс вылазит ошибка:
"array ( 'url' => 'http://rapava1980.ddns.net:2005/openmeetings/services/user/login?&user=pavel&pass=xideaxideax', 'content_type' => NULL, 'http_code' => 0, 'header_size' => 0, 'request_size' => 0, 'filetime' => -1, 'ssl_verify_result' => 0, 'redirect_count' => 0, 'total_time' => 6.2663929999999999, 'namelookup_time' => 0.060373999999999997, 'connect_time' => 0.0, 'pretransfer_time' => 0.0, 'size_upload' => 0.0, 'size_download' => 0.0, 'speed_download' => 0.0, 'speed_upload' => 0.0, 'download_content_length' => -1.0, 'upload_content_length' => -1.0, 'starttransfer_time' => 0.0, 'redirect_time' => 0.0, 'redirect_url' => '', 'primary_ip' => '', 'certinfo' => array ( ), 'primary_port' => 0, 'local_ip' => '', 'local_port' => 0, ) Fault (Service error) Request OpenMeetings! OpenMeetings Service failed and no response was returned. Additioanl info: "
На этот раз лог ОМ молчит, запрос просто не доходит к нему. Я так понимаю, это тоже ошибка выполнения curl в функции Call в файле OmRestService.php.
Настройка плагина ОМ в мудл точно такая же как на других серверах. Сервер ОМ запущен и запросы с других хостингов принимает. Что может быть? запрещены исходящие?
на хостинге отвечают, что порты не блокируют
у Вас OpenMeetings крутится на 2005м порту? Это не ошибка? telnet туда ходит?
Да я пробую на разных уже. Сейчас вернул на 5080. Даже если в браузер вписать: http://rapava1980.ddns.net:5080/openmeetings/services/user/login?&user=pavel&pass=xideaxideax ОМ обрабатывает и ответ приходит: {"serviceResult":{"code":1,"message":"5c98f506-e2ea-4634-b3f7-cd7bb980f09f","type":"SUCCESS"}} А с их сервера - глухо
Или телнет Или попробовать порт 80 Лучше оба два
порт 80 не работает даже для старого хостинга. а про телнет не понял: сделать типа telnet rapava1980.ddns.net 5080 ? а что я должен получить в итоге? на хостинге telnet нет, и он настаивает, что видно то, что порт открыт, отправляет назад к разработчику плагина :)
а у вас есть какой-то тестовый сервер OM, чтобы я своими серверами подконнектился к вашему ОМ? может проблема в нем?
ну я телепатией тоже не обладаю можно поднять ОМ на порту 80 и проверить самый простой способ проверить - телнет
тестовый сервер есть но админские права я на него не дам
Большое Вам спасибо. На новом хостинге все заработало после того, как я поменял порт ОМ на 80 (сначала не мог сменить порт, т.к. он использовался skype-ом). На новом хостинге вся связка работает начиная с PHP 5.4 (там можно менять начиная с 4.4 до 7.0), Curl 7.36.0. Думаю, что проблема POST-метода была от старости Curl-а на прошлом сервере. Еще раз спасибо.
Очень ура!
Sorry for my English. Its Google translate. I wanted to connect webinar OpenMeetings to the online-learning platform Moodle. Since hosting of video services are not included by my Internet Service Provider, I picked up webinar host on the local machine. Than I install OpenMeetings plugin on my Moodle-server (which is in my ISP-server). But a bunch is not worked.
The service itself OpenMeetings (OM) is working - I have port forwarding, use DDNS. When I put Moodle on other computer in another local network (for the purity of the experiment), everything work fine. I Became compare logs of OM-server while it accessed from different Moodle-s, and drew attention, that a request by OM plugin (same version) from Moodle at ISP hosting comes through the method HTTP-GET, while in a PHP-script Curl library functions of the HTTP-request is determined by the POST method. I did not understand until the end, why there is occurs GET, but he knew exactly that the error is at function curl_exec (Most likely, the time to run a query with the specified parameters can not curl_exec, the GET is substituted as the default method). I think the problem in the php-library libcurl but may be I am wrong?
Еrror occurs in a row: $response = curl_exec($session); in script openmeetings\api\OmRestService.php, only when in function getSecureHash($user, $options) used POST-method.
When running the plugin on sites with Moodle I watched OM log. The plug-in script, as I will try to show below, it is clear that the call is going through the POST method. But when the curl of the script gives an error. I do not know exactly why, but the error only appears when the POST method. Why OM server reports that the transfer goes through GET I do not understand, can, on the Java-server OM variable default method defined as GET, and, after receiving a request from the plug-in is overridden. I do not know. But OM then itself informs that the GET method is not valid and terminates the session.
PS. Another suspect the possibility of error is that the Moodle-server time is 3 hours behind time zone of OM-server. The curl-setting request is transmitted hash is timeout parameters. Perhaps different times on the servers fails functions. I tried to change the time zone on the server OM, but the error remained