Created
December 28, 2013 08:31
-
-
Save direvius/8157366 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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