diff --git a/lib/core/convert.py b/lib/core/convert.py index b6d5ced43..fccff8186 100644 --- a/lib/core/convert.py +++ b/lib/core/convert.py @@ -87,32 +87,32 @@ def urlencode(value, safe="%&=", convall=False, limit=False): if conf.direct or "POSTxml" in conf.paramDict: return value + count = 0 result = None if value is None: return result - if convall: - result = urllib.quote(utf8encode(value)) # Reference: http://old.nabble.com/Re:-Problem:-neither-urllib2.quote-nor-urllib.quote-encode-the--unicode-strings-arguments-p19823144.html - else: - count = 0 - while True: - result = urllib.quote(utf8encode(value), safe) + if convall or safe is None: + safe = "" - if limit and len(result) > URLENCODE_CHAR_LIMIT: - if count >= len(URLENCODE_FAILSAFE_CHARS): - dbgMsg = "failed to fully shorten urlencoding value" - logger.debug(dbgMsg) - break + while True: + result = urllib.quote(utf8encode(value), safe) - while count < len(URLENCODE_FAILSAFE_CHARS): - safe += URLENCODE_FAILSAFE_CHARS[count] - count += 1 - if safe[-1] in value: - break - else: + if limit and len(result) > URLENCODE_CHAR_LIMIT: + if count >= len(URLENCODE_FAILSAFE_CHARS): + dbgMsg = "failed to fully shorten urlencoding value" + logger.debug(dbgMsg) break + while count < len(URLENCODE_FAILSAFE_CHARS): + safe += URLENCODE_FAILSAFE_CHARS[count] + count += 1 + if safe[-1] in value: + break + else: + break + return result def utf8encode(value): diff --git a/lib/request/connect.py b/lib/request/connect.py index e59eee75a..66076a72c 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -414,7 +414,12 @@ class Connect: if place == PLACE.COOKIE and conf.cookieUrlencode: value = agent.removePayloadDelimiters(value) value = urlEncodeCookieValues(value) + elif place: + if place in (PLACE.GET, PLACE.POST): + payload = urlencode(payload, None, True, True) + value = agent.replacePayload(value, payload) + value = agent.removePayloadDelimiters(value) if conf.checkPayload: