Неверный HTTP-запрос со службой openfire MUC

Вот мой код

$xml_data ='<chatRoom>
        <broadcastPresenceRoles>
            <broadcastPresenceRole>moderator</broadcastPresenceRole>
            <broadcastPresenceRole>participant</broadcastPresenceRole>
            <broadcastPresenceRole>visitor</broadcastPresenceRole>
    </broadcastPresenceRoles>
    <canAnyoneDiscoverJID>false</canAnyoneDiscoverJID>
    <canChangeNickname>false</canChangeNickname>
    <canOccupantsChangeSubject>false</canOccupantsChangeSubject>
    <canOccupantsInvite>false</canOccupantsInvite>
    <creationDate>2014-02-12T15:52:37.592+01:00</creationDate>
    <description>Global Chat Room</description>
    <logEnabled>true</logEnabled>
    <loginRestrictedToNickname>false</loginRestrictedToNickname>
    <maxUsers>30</maxUsers>
    <membersOnly>false</membersOnly>
    <moderated>false</moderated>
    <naturalName>global-1</naturalName>
    <owners>
        <owner>admin@localhost</owner>
    </owners>
    <password>test</password>
    <persistent>true</persistent>
    <publicRoom>true</publicRoom>
    <registrationEnabled>false</registrationEnabled>
    <roomName>global</roomName>
</chatRoom>';

 $opts = array('http' =>
         array(
           'method'  => 'POST',
           'header'  => "Content-Type: text/xml",//\r\n".
           "Authorization: Basic ".base64_encode("admin:admin"),//."\r\n",
           'timeout' => 60
          )
     );

 `$URL = 'http://localhost:9090/plugins/mucservice/chatrooms'`;

        $ch = curl_init($URL);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', "Authorization: Basic ".base64_encode("admin:admin")."\r\n"));
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_data");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $output = curl_exec($ch);

        echo 'Code : '.$code;
        print_r($output);           
        curl_close($ch);

С помощью этого кода я отправляю почтовый запрос в плагин openfire muc с данными xml и заголовками авторизации, поскольку этот файл readme предложил мне сделать [ https://www.igniterealtime.org/projects/openfire/plugins/mucservice/readme.html] .. Неверный запрос 400 .

Журналы Openfire

            2014.07.18 11:04:26 org.jivesoftware.openfire.container.PluginServlet - 14 
        java.lang.ArrayIndexOutOfBoundsException: 14 
        at javax.xml.bind.DatatypeConverterImpl._parseBase64Binary(Unknown Source) 
        at javax.xml.bind.DatatypeConverterImpl.parseBase64Binary(Unknown Source) 
        at javax.xml.bind.DatatypeConverter.parseBase64Binary(Unknown Source) 
        at org.jivesoftware.openfire.plugin.servlet.BasicAuth.decode(BasicAuth.java:18) 
        at org.jivesoftware.openfire.plugin.servlet.AuthFilter.filter(AuthFilter.java:39) 
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1527) 
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) 
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
        at org.jivesoftware.openfire.container.PluginServlet.handleServlet(PluginServlet.java:316) 
        at org.jivesoftware.openfire.container.PluginServlet.service(PluginServlet.java:111) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) 
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359) 
        at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78) 
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) 
        at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164) 
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) 
        at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) 
        at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) 
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) 
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) 
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) 
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) 
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) 
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) 
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) 
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) 
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
        at org.eclipse.jetty.server.Server.handle(Server.java:349) 
        at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) 
        at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919) 
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) 
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) 
        at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) 
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) 
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) 
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) 
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) 
        at java.lang.Thread.run(Unknown Source

Я застрял с этой вещью с давних пор .. Пожалуйста, помогите мне ..

Заранее спасибо..


person Priya Bhojani    schedule 18.07.2014    source источник
comment
Я разместил здесь журналы openfire в своем вопросе. Пожалуйста, помогите мне, если что-то можно решить с помощью этого журнала.   -  person Priya Bhojani    schedule 18.07.2014
comment
похоже, он не может декодировать ваш основной заголовок авторизации - копайте в этом направлении   -  person Konstantin V. Salikhov    schedule 18.07.2014
comment
он работает с тем же заголовком аутентификации в другом запросе GET и типе контента: text/xml. Итак, как мне действовать дальше?   -  person Priya Bhojani    schedule 18.07.2014
comment
Я бы порекомендовал использовать одну из клиентских библиотек xmpp - она ​​справится со всеми этими низкоуровневыми моментами за вас.   -  person Konstantin V. Salikhov    schedule 18.07.2014
comment
Я пытаюсь создать комнату в openfire .. и библиотека xmpp для php не помогает создать комнату :( Пожалуйста, дайте мне знать, если я ошибаюсь   -  person Priya Bhojani    schedule 18.07.2014


Ответы (1)


Вам нужно установить тип контента на «Тип контента: application/xml», а не на «Тип контента: текст/xml». Тип содержимого: text/xml работает, если вы что-то ПОЛУЧАЕТЕ, но с помощью PUT и POST вам нужно установить «Content-Type: application/xml».

Другая возможная проблема - следующая строка:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', "Authorization: Basic ".base64_encode("admin:admin")."\r\n"));

Попробуйте изменить его на:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', 'Authorization: Basic '.base64_encode("admin:admin")));
person Roman S.    schedule 19.07.2014