Latest posts on Как работать с Zope через XMLRPC? topichttps://python.su/forum/topic/977/2007-07-24T15:28:15+03:00Веб-технологии :: Zope/Plone/Bluebream :: Как работать с Zope через XMLRPC?
2007-07-24T15:28:15+03:00albert6822Если нужно просто подключиться к зопе из обычного питоновского приложения не обязательно через XMLRPC, то можно заюзать родные библиотеки зопы. Через них можно делать все точно также, как из самой зопы. С установкой идет пример
Веб-технологии :: Zope/Plone/Bluebream :: Как работать с Zope через XMLRPC?
2007-07-06T09:54:48+03:00tretiy36453zope третий?<br/>про второй ничего не знаю. В третий тока-тока врубаюсь.<br/>url примерно так должен выглядеть: <a href="http://localhost:8080/object">http://localhost:8080/object</a><br/>порт указывать обязательно, т.к. zope(twisted) на нем висит. После порта - путь до объекта. xmlrpc сервер выступает как “вид”. представление определенного объекта. для того штаб его пользовать, для объекта object, надо прописать методы (в питоновском классе наследованном от MethodPublisher) + прописать их в zcml. <br/>у Рихтера в книжке вполне рабочий пример. тащи оттуда.<br/>если zope третий, конечно.<br/>sorry за дилетанство.
Веб-технологии :: Zope/Plone/Bluebream :: Как работать с Zope через XMLRPC?
2007-07-06T05:54:25+03:00$m1t6449Как работать с Zope через XMLRPC?<br/>Когда делаю так:<br/><div class="code"><pre><span class="o">>>></span> <span class="kn">from</span> <span class="nn">xmlrpclib</span> <span class="kn">import</span> <span class="n">ServerProxy</span>
<span class="o">>>></span> <span class="n">server</span> <span class="o">=</span> <span class="n">ServerProxy</span><span class="p">(</span><span class="s">"http://localhost"</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">f</span><span class="o">=</span><span class="n">server</span><span class="o">.</span><span class="n">objectIds</span>
<span class="o">>>></span> <span class="k">print</span> <span class="n">f</span><span class="p">()</span>
</pre></div>Получаю error: (10061, ‘Connection refused’)<br/><br/>Взял с <a href="http://Zope.org" rel="nofollow">Zope.org</a> кусок кода, где запрос посылается с авторизацией:<br/><div class="code"><pre><span class="kn">import</span> <span class="nn">string</span><span class="o">,</span> <span class="nn">xmlrpclib</span><span class="o">,</span> <span class="nn">httplib</span>
<span class="kn">from</span> <span class="nn">base64</span> <span class="kn">import</span> <span class="n">encodestring</span>
<span class="k">class</span> <span class="nc">BasicAuthTransport</span><span class="p">(</span><span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Transport</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">username</span><span class="o">=</span><span class="n">username</span>
<span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="o">=</span><span class="n">password</span>
<span class="k">def</span> <span class="nf">request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">handler</span><span class="p">,</span> <span class="n">request_body</span><span class="p">):</span>
<span class="c"># issue XML-RPC request</span>
<span class="n">h</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTP</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">putrequest</span><span class="p">(</span><span class="s">"POST"</span><span class="p">,</span> <span class="n">handler</span><span class="p">)</span>
<span class="c"># required by HTTP/1.1</span>
<span class="n">h</span><span class="o">.</span><span class="n">putheader</span><span class="p">(</span><span class="s">"Host"</span><span class="p">,</span> <span class="n">host</span><span class="p">)</span>
<span class="c"># required by XML-RPC</span>
<span class="n">h</span><span class="o">.</span><span class="n">putheader</span><span class="p">(</span><span class="s">"User-Agent"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">user_agent</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">putheader</span><span class="p">(</span><span class="s">"Content-Type"</span><span class="p">,</span> <span class="s">"text/xml"</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">putheader</span><span class="p">(</span><span class="s">"Content-Length"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">request_body</span><span class="p">)))</span>
<span class="c"># basic auth</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">username</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">h</span><span class="o">.</span><span class="n">putheader</span><span class="p">(</span><span class="s">"AUTHORIZATION"</span><span class="p">,</span> <span class="s">"Basic </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">string</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
<span class="n">encodestring</span><span class="p">(</span><span class="s">"</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span><span class="p">)),</span>
<span class="s">"</span><span class="se">\012</span><span class="s">"</span><span class="p">,</span> <span class="s">""</span><span class="p">))</span>
<span class="n">h</span><span class="o">.</span><span class="n">endheaders</span><span class="p">()</span>
<span class="k">if</span> <span class="n">request_body</span><span class="p">:</span>
<span class="n">h</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">request_body</span><span class="p">)</span>
<span class="n">errcode</span><span class="p">,</span> <span class="n">errmsg</span><span class="p">,</span> <span class="n">headers</span> <span class="o">=</span> <span class="n">h</span><span class="o">.</span><span class="n">getreply</span><span class="p">()</span>
<span class="k">if</span> <span class="n">errcode</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">ProtocolError</span><span class="p">(</span>
<span class="n">host</span> <span class="o">+</span> <span class="n">handler</span><span class="p">,</span>
<span class="n">errcode</span><span class="p">,</span> <span class="n">errmsg</span><span class="p">,</span>
<span class="n">headers</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_response</span><span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">getfile</span><span class="p">())</span>
<span class="n">req</span><span class="o">=</span><span class="s">'<?xml version="1.0"?><methodCall><methodName>objectIds</methodName><params/></methodCall>'</span>
<span class="n">MyTransport</span><span class="o">=</span><span class="n">BasicAuthTransport</span><span class="p">(</span><span class="s">'George'</span><span class="p">,</span><span class="s">'password'</span><span class="p">)</span>
<span class="k">print</span> <span class="n">MyTransport</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">"http://localhost"</span><span class="p">,</span><span class="bp">None</span><span class="p">,</span><span class="n">req</span><span class="p">)</span>
</pre></div>Получаю:<br/>InvalidURL: nonnumeric port: ‘//localhost’<br/>Если изменить MyTransport.request("<a href="http://localhost">http://localhost</a>“,None,req) на MyTransport.request(”<a href="http://localhost:8080">http://localhost:8080</a>“,None,req) то вообще: <br/>gaierror: (11001, ‘getaddrinfo failed’)<br/>Гуглил, читал доки – что то не помогло…<br/><br/>Еще вопрос: есть такая функция как SimpleXMLRPCServer – можно ли используя ее создать на каком-либо хостинге XMLRPC сервер? Мои эксперименты с аппачам успехом не увенчались. Я так же не понимаю, какой смысл передаваемого параметра:<br/>server = SimpleXMLRPCServer((”localhost", 8000))<br/>Первый(второй если считать c единицы =)) – это порт на который будут идти запросы, то зачем серверу знать свой url?