Skip to content

Instantly share code, notes, and snippets.

@direvius
Created December 28, 2013 08:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save direvius/8157366 to your computer and use it in GitHub Desktop.
Save direvius/8157366 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from xmlrpc.client import Fault
from xmlrpc.client import ServerProxy
from xmlrpc.client import Transport
import urllib.request as urllib2
import xml.etree.ElementTree as ET
class MyTransport(Transport):
def __init__(
self,
opener=None,
https=False,
use_datetime=False,
log_only=False,
ammo_file=None,
):
super(MyTransport, self).__init__(use_datetime=False)
self.opener = opener or urllib2.build_opener()
self.https = https
self.log_only=log_only
if ammo_file:
self.file = open(ammo_file, 'w')
def request(self, host, handler, request_body, verbose=0):
proto = ('http', 'https')[bool(self.https)]
req = urllib2.Request('%s://%s%s' % (proto, host, handler), request_body)
req.add_header('User-agent', self.user_agent)
req.add_header('Connection', 'Close')
if self.file:
data = req.get_data().decode('utf8')
marker = ET.fromstring(data).find('methodName').text
ammo = '''\
{method} {selector} HTTP/1.1\r
Host: {host}\r
{headers}\r
Content-length: {content_length}\r
{body}
'''.format(
method=req.get_method(),
host=req.get_host(),
selector=req.get_selector(),
headers='\r\n'.join("%s: %s" % (name, value)
for (name, value) in req.header_items()),
body=data,
content_length=len(data),
)
self.file.write("%s %s\n%s\n" % (len(ammo), marker, ammo))
self.verbose = verbose
if self.log_only:
response = None
else:
response = self.parse_response(self.opener.open(req))
return response
proxy = ServerProxy(
'http://my.host.example.org:35999',
transport=MyTransport(
https=False,
ammo_file='logon.ammo',
))
# Params
data = {
'name': 'user',
'password': 'pw123',
}
def createLogon():
try:
logon_id = proxy.MyService.CreateLogon(data)
except Fault as f:
print(f.faultString)
return None
return logon_id
if __name__ == '__main__':
for i in range(1, 100):
print(createLogon())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment