Несогласованное декодирование закодированных параметров запроса URL с использованием Python и GAE.

Я пытаюсь получить согласованные строки URL-адресов в своем мобильном клиенте перед отправкой и на сервере после получения, чтобы иметь возможность надежно добавить хэш для целей контрольной суммы безопасности. В настоящее время я добавляю хеш после кодирования URL-адреса на клиенте и пытаюсь получить URL-адрес до того, как что-либо будет декодировано на сервере, но я получаю уже декодированный один символ (точка):

Когда я публикую что-то вроде этого:

 https://myapp.appspot.com/endpt?par=0%3Afirstlast%40gmail%2Ecom&di . . .

Отсюда на сервере:

self.request.url 

Я получил:

https://myapp.appspot.com/endpt?par=0%3Afirstlast%40gmail.com&di . . .

И из этого:

self.request.get('par')

Я получаю его полностью декодированным, как я и ожидал:

0:[email protected]

Мне интересно, как я могу получить URL-адрес до того, как произойдет ЛЮБОЕ декодирование? Или, в качестве альтернативы, я мог бы выполнить хэширование вне кодирования/декодирования, если можно получить URL-адрес с декодированной всей частью запроса? т.е. Я могу ввести свой хеш в любой момент, чтобы получить стабильные и надежные результаты. Спасибо.


person leontx    schedule 24.04.2012    source источник
comment
Почему бы просто не декодировать обе стороны перед хешированием?   -  person Eli    schedule 24.04.2012
comment
Спасибо @Эли. Первоначальная идея хеширования внутри любого кодирования (т. е. после клиентского кодирования и перед серверным декодированием) заключалась в том, чтобы быть невосприимчивым к любой несогласованности кодирования и декодирования. Но, учитывая эту проблему, я пошел дальше и перенес хэширование за пределы кодирования, и хотя я в конечном итоге настроил сторону кодирования, все, похоже, работает.   -  person leontx    schedule 25.04.2012


Ответы (1)


Вы можете получить это прямо из своей среды WSGI, но я бы посоветовал взять страницу из книгу Amazon и определение канонического формата для подписания URL-адресов. Затем вы можете кодировать и форматировать URL-адреса одинаково на обоих концах, и вам не нужно полагаться на капризы фреймворков и прокси-серверов, чтобы не мешать тривиальным деталям кодирования ваших URL-адресов.

person Nick Johnson    schedule 27.04.2012