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: if conf.direct or "POSTxml" in conf.paramDict:
return value return value
count = 0
result = None result = None
if value is None: if value is None:
return result return result
if convall: if convall or safe is None:
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 safe = ""
else:
count = 0
while True:
result = urllib.quote(utf8encode(value), safe)
if limit and len(result) > URLENCODE_CHAR_LIMIT: while True:
if count >= len(URLENCODE_FAILSAFE_CHARS): result = urllib.quote(utf8encode(value), safe)
dbgMsg = "failed to fully shorten urlencoding value"
logger.debug(dbgMsg)
break
while count < len(URLENCODE_FAILSAFE_CHARS): if limit and len(result) > URLENCODE_CHAR_LIMIT:
safe += URLENCODE_FAILSAFE_CHARS[count] if count >= len(URLENCODE_FAILSAFE_CHARS):
count += 1 dbgMsg = "failed to fully shorten urlencoding value"
if safe[-1] in value: logger.debug(dbgMsg)
break
else:
break break
while count < len(URLENCODE_FAILSAFE_CHARS):
safe += URLENCODE_FAILSAFE_CHARS[count]
count += 1
if safe[-1] in value:
break
else:
break
return result return result
def utf8encode(value): def utf8encode(value):

View File

@ -414,7 +414,12 @@ class Connect:
if place == PLACE.COOKIE and conf.cookieUrlencode: if place == PLACE.COOKIE and conf.cookieUrlencode:
value = agent.removePayloadDelimiters(value) value = agent.removePayloadDelimiters(value)
value = urlEncodeCookieValues(value) value = urlEncodeCookieValues(value)
elif place: elif place:
if place in (PLACE.GET, PLACE.POST):
payload = urlencode(payload, None, True, True)
value = agent.replacePayload(value, payload)
value = agent.removePayloadDelimiters(value) value = agent.removePayloadDelimiters(value)
if conf.checkPayload: if conf.checkPayload: