Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
3749aa1e
Commit
3749aa1e
authored
Oct 22, 2002
by
Fredrik Lundh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add support for basic authentication, based on patch #624180
by Phillip J. Eby
parent
09b3d3f8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
12 deletions
+51
-12
Doc/lib/libxmlrpclib.tex
Doc/lib/libxmlrpclib.tex
+7
-0
Lib/xmlrpclib.py
Lib/xmlrpclib.py
+44
-12
No files found.
Doc/lib/libxmlrpclib.tex
View file @
3749aa1e
...
...
@@ -28,6 +28,13 @@ URLs and an internal HTTP \class{Transport} instance otherwise. The
optional third argument is an encoding, by default UTF-8. The optional
fourth argument is a debugging flag.
Both the HTTP and HTTPS transports support the URL syntax extension for
HTTP Basic Authorization:
\code
{
http://user:pass@host:port/path
}
. The
\code
{
user:pass
}
portion will be base64-encoded as an HTTP `Authorization'
header, and sent to the remote server as part of the connection process
when invoking an XML-RPC method. You only need to use this if the
remote server requires a Basic Authentication user and password.
The returned instance is a proxy object with methods that can be used
to invoke corresponding RPC calls on the remote server. If the remote
server supports the introspection API, the proxy can also be used to query
...
...
Lib/xmlrpclib.py
View file @
3749aa1e
...
...
@@ -43,6 +43,7 @@
# 2002-04-16 fl Added __str__ methods to datetime/binary wrappers
# 2002-05-15 fl Added error constants (from Andrew Kuchling)
# 2002-06-27 fl Merged with Python CVS version
# 2002-10-22 fl Added basic authentication (based on code from Phillip Eby)
#
# Copyright (c) 1999-2002 by Secret Labs AB.
# Copyright (c) 1999-2002 by Fredrik Lundh.
...
...
@@ -1043,6 +1044,37 @@ class Transport:
# get parser and unmarshaller
return
getparser
()
##
# Get authorization info from host parameter
# Host may be a string, or a (host, x509-dict) tuple; if a string,
# it is checked for a "user:pw@host" format, and a "Basic
# Authentication" header is added if appropriate.
#
# @param host Host descriptor (URL or (URL, x509 info) tuple).
# @return A 3-tuple containing (actual host, extra headers,
# x509 info). The header and x509 fields may be None.
def
get_host_info
(
self
,
host
):
x509
=
{}
if
isinstance
(
host
,
TupleType
):
host
,
x509
=
host
import
urllib
auth
,
host
=
urllib
.
splituser
(
host
)
if
auth
:
import
base64
auth
=
base64
.
encodestring
(
auth
)
auth
=
string
.
join
(
string
.
split
(
auth
),
""
)
# get rid of whitespace
extra_headers
=
[
(
"Authorization"
,
"Basic "
+
auth
)
]
else
:
extra_headers
=
None
return
host
,
extra_headers
,
x509
##
# Connect to server.
#
...
...
@@ -1052,6 +1084,7 @@ class Transport:
def
make_connection
(
self
,
host
):
# create a HTTP connection object from a host descriptor
import
httplib
host
,
extra_headers
,
x509
=
self
.
get_host_info
(
host
)
return
httplib
.
HTTP
(
host
)
##
...
...
@@ -1071,7 +1104,13 @@ class Transport:
# @param host Host name.
def
send_host
(
self
,
connection
,
host
):
host
,
extra_headers
,
x509
=
self
.
get_host_info
(
host
)
connection
.
putheader
(
"Host"
,
host
)
if
extra_headers
:
if
isinstance
(
extra_headers
,
DictType
):
extra_headers
=
extra_headers
.
items
()
for
key
,
value
in
extra_headers
:
connection
.
putheader
(
key
,
value
)
##
# Send user-agent identifier.
...
...
@@ -1147,22 +1186,15 @@ class SafeTransport(Transport):
# create a HTTPS connection object from a host descriptor
# host may be a string, or a (host, x509-dict) tuple
import
httplib
if
isinstance
(
host
,
TupleType
):
host
,
x509
=
host
else
:
x509
=
{}
host
,
extra_headers
,
x509
=
self
.
get_host_info
(
host
)
try
:
HTTPS
=
httplib
.
HTTPS
except
AttributeError
:
raise
NotImplementedError
,
\
"your version of httplib doesn't support HTTPS"
raise
NotImplementedError
(
"your version of httplib doesn't support HTTPS"
)
else
:
return
apply
(
HTTPS
,
(
host
,
None
),
x509
)
def
send_host
(
self
,
connection
,
host
):
if
isinstance
(
host
,
TupleType
):
host
,
x509
=
host
connection
.
putheader
(
"Host"
,
host
)
return
apply
(
HTTPS
,
(
host
,
None
),
x509
or
{})
##
# Standard server proxy. This class establishes a virtual connection
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment