Как я могу просмотреть ответ после xmlrp c бросил http.client.badstatusline - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь подключиться к старому 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"?>

у меня должен быть какой-то способ получить ответ от этого исключения, я просто не конечно как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...