Skip to content

Commit 54f0fbe

Browse files
committed
solved problem when try to connect blogs with HTTPS
1 parent c99ed2f commit 54f0fbe

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

wordpress_xmlrpc/base.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
import collections
22
import sys
3+
import urllib.parse
34

45
from wordpress_xmlrpc.compat import xmlrpc_client, dict_type
56
from wordpress_xmlrpc.exceptions import ServerConnectionError, UnsupportedXmlrpcMethodError, InvalidCredentialsError, XmlrpcDisabledError
67

78

89
class Client(object):
10+
911
"""
1012
Connection to a WordPress XML-RPC API endpoint.
1113
1214
To execute XML-RPC methods, pass an instance of an
1315
`XmlrpcMethod`-derived class to `Client`'s `call` method.
1416
"""
1517

16-
def __init__(self, url, username, password, blog_id=0, transport=None, verbose=False):
18+
def __init__(self, url, username, password, blog_id=0, transport=None, verbose=False, safe_transport=None):
1719
self.url = url
1820
self.username = username
1921
self.password = password
2022
self.blog_id = blog_id
2123

22-
self.setup(transport, verbose)
23-
24+
self.setup(transport, verbose, safe_transport)
2425

25-
def setup(self, transport, verbose):
26+
def setup(self, transport, verbose, safe_transport):
2627
try:
2728
self.server = xmlrpc_client.ServerProxy(self.url, allow_none=True, transport=transport,
28-
verbose=verbose)
29+
verbose=verbose)
2930
self.supported_methods = self.server.mt.supportedMethods()
3031
except xmlrpc_client.ProtocolError:
3132
e = sys.exc_info()[1]
@@ -34,7 +35,12 @@ def setup(self, transport, verbose):
3435
self.url = e.headers['location']
3536
except KeyError:
3637
self.url = e.headers['Location']
37-
self.setup(transport, verbose)
38+
39+
protocol, _ = urllib.parse.splittype(self.url)
40+
if protocol == 'https':
41+
transport = safe_transport
42+
43+
self.setup(transport, verbose, None)
3844
else:
3945
raise ServerConnectionError(repr(e))
4046

@@ -59,6 +65,7 @@ def call(self, method):
5965

6066

6167
class XmlrpcMethod(object):
68+
6269
"""
6370
Base class for XML-RPC methods.
6471
@@ -80,10 +87,12 @@ def __init__(self, *args, **kwargs):
8087
if self.optional_args:
8188
max_num_args = len(self.method_args) + len(self.optional_args)
8289
if not (len(self.method_args) <= len(args) <= max_num_args):
83-
raise ValueError("Invalid number of parameters to %s" % self.method_name)
90+
raise ValueError(
91+
"Invalid number of parameters to %s" % self.method_name)
8492
else:
8593
if len(args) != len(self.method_args):
86-
raise ValueError("Invalid number of parameters to %s" % self.method_name)
94+
raise ValueError(
95+
"Invalid number of parameters to %s" % self.method_name)
8796

8897
for i, arg_name in enumerate(self.method_args):
8998
setattr(self, arg_name, args[i])
@@ -144,13 +153,15 @@ def process_result(self, raw_result):
144153

145154

146155
class AnonymousMethod(XmlrpcMethod):
156+
147157
"""
148158
An XML-RPC method for which no authentication is required.
149159
"""
150160
pass
151161

152162

153163
class AuthenticatedMethod(XmlrpcMethod):
164+
154165
"""
155166
An XML-RPC method for which user authentication is required.
156167

0 commit comments

Comments
 (0)