简体   繁体   English

如何从完整URL创建百分比编码的URL?

[英]How can I create a percent encoded URL from complete URL?

The input url is mixed ascii and multi byte code. 输入的URL是混合的ascii和多字节代码。 And I can't change this strings. 而且我无法更改此字符串。 I would like to download this url, but an error occured ordinal not in range(128) . 我想下载此URL,但是ordinal not in range(128)发生了错误。

input_url = "http://sample.jp/api?v1=aaa&v2=日本語&v3=ccc"

req = urllib.request.Request(input_url)
resp = None
try:
    resp = urllib.request.urlopen(req)
except UnicodeEncodeError as e:
    print(e.reason)  # I had an error `ordinal not in range(128)`
return resp

First, I tried urllib.parse.quote() but the result is http%3a%2f%2fsample%2ejp%2fapi%3fv1%3daaa%26v2%3d%93%fa%96%7b%8c%ea%26v3%3dccc . 首先,我尝试了urllib.parse.quote()但结果是http%3a%2f%2fsample%2ejp%2fapi%3fv1%3daaa%26v2%3d%93%fa%96%7b%8c%ea%26v3%3dccc I had another error ValueError: unknown url type . 我还有另一个错误ValueError: unknown url type How can I resolve this problem? 我该如何解决这个问题? Or do you have some ideas? 还是您有一些想法?

You need to encode those parameters to UTF-8 bytes and the bytes toURL percent encoding. 您需要将这些参数编码为UTF-8字节,并将字节编码为URL百分比编码。 You can do all this with the urllib.parse module : 您可以使用urllib.parse模块完成所有这些urllib.parse

from urllib.parse import urlparse, parse_qs, urlencode

parsed = urlparse(input_url)
query = parse_qs(parsed.query)
fixed_url = parsed._replace(query=urlencode(query, doseq=True)).geturl()

Demo: 演示:

>>> from urllib.parse import urlparse, parse_qs, urlencode
>>> input_url = "http://sample.jp/api?v1=aaa&v2=日本語&v3=ccc"
>>> parsed = urlparse(input_url)
>>> query = parse_qs(parsed.query)
>>> parsed._replace(query=urlencode(query, doseq=True)).geturl()
'http://sample.jp/api?v1=aaa&v2=%E6%97%A5%E6%9C%AC%E8%AA%9E&v3=ccc'
>>> import urllib.request
>>> urllib.request.urlopen(_)
<http.client.HTTPResponse object at 0x108f0f7b8>

A combination of urllib, and urlparse should do it for you: urllib和urlparse的组合应该为您做到这一点:

>>> urllib.urlencode(urlparse.parse_qsl(urlparse.urlparse(input_url).query))
'v1=aaa&v2=%E6%97%A5%E6%9C%AC%E8%AA%9E&v3=ccc'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何编码/解码 Python 中的百分比编码 (URL) 字符串? - How do I encode/decode percent-encoded (URL) strings in Python? 如何对 Python 中的 URL 参数进行百分比编码? - How can I percent-encode URL parameters in Python? 如何在App Engine上使用Django接收百分比编码斜杠? - How can I receive percent encoded slashes with Django on App Engine? 如何请求已在 python-requests 中进行 URL 编码的 URL? - How can I request a URL that is already URL-encoded in python-requests? 如何将非ASCII字符转换为百分比编码的URL到字符串? - How to convert percent-encoded url to string with non-ascii chars? 是否可以从 Image 对象创建编码的 base64 URL? - Is it possible to create encoded base64 URL from Image object? 从WordPress迁移到Django时,如何将百分比编码的子弹字段转换为unicode? - How do I convert percent encoded slug fields to unicode when migrating from WordPress to Django? 如何从 Django 中的编码 URL 获取请求参数? - How to get request parameters from an encoded URL in Django? 我如何阅读python django项目URL并使用CSS和javascript的工作方式在电子邮件中显示完整的网页 - How can I read a python django project URL and display complete webpage in email with it's CSS and javascript working 如何从PYTHON中的字符串创建一个SEO友好的划线分隔的URL? - How can I create a SEO friendly dash-delimited url from a string in PYTHON?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM