Следующий URL-адрес работает, как ожидается, и возвращает значение "ноль".
https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https: //mr.wikipedia.org/s/4jp4
Но на той же странице со строкой Unicode вместо строки ASCII выдается ошибка:
"errorMessage": "'ascii' codec can't encode characters in position 10-20: ordinal not in range(128)", "errorType": "UnicodeEncodeError"
Как мне кодировать символы Unicode при передаче строки в шлюз API?
https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https: //mr.wikipedia.org/wiki/%E0%A4%95%E0%A4%BF%E0%A4%B6%E0%A5%8B%E0%A4%B0%E0%A4%BE%E0 % A4% B5% E0% A4% B8% E0% A5% 8D% E0% A4% A5% E0% A4% BE
Я использую следующую закладку для создания упомянутого URL выше ...
javascript:(function(){location.href='https://z3nt6lcj40.execute-api.us-east-1.amazonaws.com/mycall?url='+encodeURIComponent(location.href);})();
В вашей лямбда-функции есть строка, которая цитирует URL
url1 = urllib.parse.unquote(url)
с
'https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/wiki/%E0%A4%95%E0%A4%BF%E0%A4%B6%E0%A5%8B%E0%A4%B0%E0%A4%BE%E0%A4%B5%E0%A4%B8%E0%A5%8D%E0%A4%A5%E0%A4%BE'
до
'https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/wiki/किशोरावस्था'
Части, отличные от US-ASCII вышеупомянутые результаты должны быть закодированы перед выполнением запроса. Это в компоненте запроса.
Рекомендуется разделять URI на его компоненты при кодировании , чтобы не изменять его семантику.
Вот еще несколько вещей для сделать перед отправкой запроса на URL.
url1 = urllib.parse.unquote(url) urlparts = urllib.parse.urlparse(url1) querypart = urllib.parse.parse_qs(urlparts.query) querypart_enc = urllib.parse.urlencode(querypart) # Rebuild URL with escaped query part url1 = urllib.parse.urlunparse(( urlparts.scheme, urlparts.netloc, urlparts.path, urlparts.params, querypart_enc, urlparts.fragment ))