this was bothering me for some time (POST and/or GET payloads needs to be urlencoded throughly)

This commit is contained in:
Miroslav Stampar 2011-03-11 19:57:44 +00:00
parent d8a76ebe34
commit 5eae525010
2 changed files with 22 additions and 17 deletions

View File

@ -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):

View File

@ -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: