XML-RPC and firewall [solution]
Jeffrey Kunce
Jeffrey.Kunce at p98.f112.n480.z2.fidonet.org
Fri Jul 2 18:08:19 EDT 1999
From: "Jeffrey Kunce" <kuncej at mail.conservation.state.mo.us>
--=_693F2E73.E584ED6B
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I have been playing with XML-RPC on my intranet, but
found that Fredrik's xmlrpclib.py wouldn't talk to external=20
servers through our firewall.
Since urllib has proxy-server support built-in, I wrote a=20
urllib-based transport plugin for xmlrpclib.py (attached).
Now I can speak XML-RPC with the rest of the world :-)
Testing on this has been minimal - use at your own risk.
If it checks out, maybe /F will include it in the distribution.
--Jeff
--=_693F2E73.E584ED6B
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="xmlrpc_urllib_transport.py"
'''\
urllib-based transport plugin for xmlrpclib.py (with test code)
xmlrpc_urllib_transport.py
jjk 07/02/99 001 from xmlrpc_test_urllib.py 002
urllib transport was needed to get past proxy server
for xmlrpclib __version__ =3D "0.9.8"
****************************
*** USE AT YOUR OWN RISK ***
****************************
'''
import xmlrpclib
class UrllibTransport(xmlrpclib.Transport):
'''Handles an HTTP transaction to an XML-RPC server via urllib
(urllib includes proxy-server support)
jjk 07/02/99'''
def request(self, host, handler, request_body):
'''issue XML-RPC request
jjk 07/02/99'''
import urllib
urlopener =3D urllib.FancyURLopener()
urlopener.addheaders =3D [('User-agent', self.user_agent)]
# probably should use appropriate 'join' methods instead =
of 'http://'+host+handler
f =3D urlopener.open('http://'+host+handler, request_body)
return(self.parse_response(f))
def test():
'''test UrllibTransport for xmlrpclib
Use proxy for external address, no proxy for local address
jjk 07/02/99'''
import os
print 'testing xmlrpc_urllib_transport.py'
raw_input('start xmlrpcserver.py (test mode) on local machine, =
then press enter')
testhosts =3D [
(0, "http://localhost:8000"), # don't use proxy, =
local host
#(0, "http://mdcmap.mocons.gov:8000"), # don't use =
proxy, another host on local network
(1, "http://betty.userland.com"), #use proxy, =
userland's XML-RPC server
]
try: proxies =3D os.environ['http_proxy']
except KeyError: proxies =3D None
for useproxy, host in testhosts:
print=20
print 'testing host:', host
if (useproxy):=20
if (proxies):
os.environ['HTTP_PROXY'] =3D proxies
else:
try: del os.environ['HTTP_PROXY']
except KeyError: pass
server =3D xmlrpclib.Server(host, transport=3DUrllibTranspo=
rt())
print server
try: print server.examples.getStateName(41)
except xmlrpclib.Error, v: print "ERROR", v
=09
if (__name__=3D=3D'__main__'):
import pdb
test()
--=_693F2E73.E584ED6B--
More information about the Python-list
mailing list