Я пытаюсь подключиться к старому perl серверу xmlrp c. но он не возвращает никаких заголовков со своим ответом, поэтому мой клиент python3 захлебывается им. Я пытался поймать исключение, но мне кажется, что нужно что-то с этим сделать.
Я знаю, что он не сломан, я могу назвать его с perl, но не с python. Я пытаюсь изменить сервер, чтобы включить заголовок http, но пока не смог выяснить это. Я также думаю о том, чтобы попробовать это с сокетами, но кажется, что это было бы очень грязно и fr agile.
perl, который работает:
use Frontier::Client;
use Data::Dumper;
use strict;
use warnings;
my $c = new Frontier::Client( url => 'https://somesite:666/RPC2', debug => 1);
$c->{'ua'}->ssl_opts(verify_hostname => 0, SSL_verify_mode => 0);
my $q = $c->call('ping');
the python это не так:
import ssl
import xmlrpc.client
ssl._create_default_https_context = ssl._create_unverified_context
s = xmlrpc.client.ServerProxy('https://somesite.com:666/RPC2', verbose=True)
x = s.ping()
и полученная трассировка стека:
send: b'POST /RPC2 HTTP/1.1\r\nHost: somesite.com:666\r\nAccept-Encoding: gzip\r\nContent-Type: text/xml\r\nUser-Agent: Python-xmlrpc/3.6\r\nContent-Length: 98\r\n\r\n'
send: b"<?xml version='1.0'?>\n<methodCall>\n<methodName>ping</methodName>\n<params>\n</params>\n</methodCall>\n"
reply: '<?xml version="1.0"?>\n'
Traceback (most recent call last):
File "test_xml.py", line 12, in <module>
x = s.ping()
File "/usr/lib/python3.6/xmlrpc/client.py", line 1112, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python3.6/xmlrpc/client.py", line 1452, in __request
verbose=self.__verbose
File "/usr/lib/python3.6/xmlrpc/client.py", line 1154, in request
return self.single_request(host, handler, request_body, verbose)
File "/usr/lib/python3.6/xmlrpc/client.py", line 1167, in single_request
resp = http_conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1346, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 289, in _read_status
raise BadStatusLine(line)
http.client.BadStatusLine: <?xml version="1.0"?>
у меня должен быть какой-то способ получить ответ от этого исключения, я просто не конечно как.