From 34a8cd75e3b1dfb1279c344ecfbe76a6c699fc6a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 15 Sep 2010 12:45:41 +0000 Subject: [PATCH] added support for setting HTTP method manualy --- lib/request/connect.py | 9 ++++++++- lib/request/methodrequest.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 lib/request/methodrequest.py diff --git a/lib/request/connect.py b/lib/request/connect.py index e4f9f4667..5365e9aa0 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -44,6 +44,7 @@ from lib.request.basic import forgeHeaders from lib.request.basic import parseResponse from lib.request.direct import direct from lib.request.comparison import comparison +from lib.request.methodrequest import MethodRequest class Connect: @@ -71,6 +72,7 @@ class Connect: url = kwargs.get('url', conf.url).replace(" ", "%20") get = kwargs.get('get', None) post = kwargs.get('post', None) + method = kwargs.get('method', None) cookie = kwargs.get('cookie', None) ua = kwargs.get('ua', None) direct = kwargs.get('direct', False) @@ -127,7 +129,12 @@ class Connect: # Perform HTTP request headers = forgeHeaders(cookie, ua) - req = urllib2.Request(url, post, headers) + + if method: + req = MethodRequest(url, post, headers) + req.set_method(method) + else: + req = urllib2.Request(url, post, headers) if not req.has_header("Accept-Encoding"): requestHeaders += "Accept-Encoding: identity\n" diff --git a/lib/request/methodrequest.py b/lib/request/methodrequest.py new file mode 100644 index 000000000..fc6363e6b --- /dev/null +++ b/lib/request/methodrequest.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +""" +$Id$ + +This file is part of the sqlmap project, http://sqlmap.sourceforge.net. + +Copyright (c) 2010 Miroslav Stampar + +sqlmap is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation version 2 of the License. + +sqlmap is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along +with sqlmap; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" + +import urllib2 + + +class MethodRequest(urllib2.Request): + ''' Used to create HEAD/PUT/DELETE/... requests with urllib2 ''' + def set_method(self, method): + self.method = method.upper() + def get_method(self): + return getattr(self, 'method', urllib2.Request.get_method(self))