以下URL可以正常工作,并返回“ null”。
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"
在将字符串传递到API网关时如何编码unicode字符?
我正在使用以下书签生成上面提到的URL ...
javascript:(function(){location.href='https://z3nt6lcj40.execute-api.us-east-1.amazonaws.com/mycall?url='+encodeURIComponent(location.href);})();
答案 0 :(得分:2)
您的lambda函数中有这行取消了网址的引用
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部分必须在执行请求之前进行编码。这是在查询组件中。
建议separate URI into its components when encoding以免更改其语义。
在向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
))