无法从 urllib.request.urlopen 获得以点结尾的 url 的响应
Can not get response from urllib.request.urlopen with an url ending with a dot
我有一个看起来像这样的脚本,用户名以“.”结尾。点.
import urllib.request
url = "https://likee.video/@evadecarle."
response = urllib.request.urlopen(url)
print(response)
结束点“.”在 url 似乎引起了问题。
如果我将 url 更改为 url = "https://likee.video/@11Happyness07.12"
它工作正常。
我如何使它与结束点“。”一起使用?
如果我们尝试使用 urllib.requests
获取 https://likee.video/@evadecarle.
,我们会看到:
>>> import urllib.request
>>> response = urllib.request.urlopen('https://likee.video/@evadecarle.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.10/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib64/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib64/python3.10/urllib/request.py", line 563, in error
return self._call_chain(*args)
File "/usr/lib64/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib64/python3.10/urllib/request.py", line 643, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 302: Moved Temporarily
>>>
它失败了,因为远程网站正在返回 302 状态代码
(http 重定向)。通常,您会使用一个
HTTPRedirectHandler
,类似于:
>>> opener = urllib.request.build_opener(urllib.request.HTTPRedirectHandler(), urllib.request.HTTPHandler(debuglevel=0))
>>> resp = opener.open('https://google.com')
>>> resp.url
'https://www.google.com/'
不幸的是,URL https://likee.video/@evadecarle.
是一个奇数
一:它 returns 一个 302
状态码,但不包括 Location:
header 识别重定向目标。
因此,urllib
似乎处理不当。
其他人可能会就此纠正我,但它看起来像 requests
库可以毫无问题地处理这个问题:
>>> resp = requests.get('https://likee.video/@evadecarle.')
>>> resp
<Response [302]>
>>> resp.text[:80]
'<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="robots" c'
所以使用 requests
模块可能是最简单的解决方案。
我有一个看起来像这样的脚本,用户名以“.”结尾。点.
import urllib.request
url = "https://likee.video/@evadecarle."
response = urllib.request.urlopen(url)
print(response)
结束点“.”在 url 似乎引起了问题。
如果我将 url 更改为 url = "https://likee.video/@11Happyness07.12"
它工作正常。
我如何使它与结束点“。”一起使用?
如果我们尝试使用 urllib.requests
获取 https://likee.video/@evadecarle.
,我们会看到:
>>> import urllib.request
>>> response = urllib.request.urlopen('https://likee.video/@evadecarle.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.10/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib64/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib64/python3.10/urllib/request.py", line 563, in error
return self._call_chain(*args)
File "/usr/lib64/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib64/python3.10/urllib/request.py", line 643, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 302: Moved Temporarily
>>>
它失败了,因为远程网站正在返回 302 状态代码
(http 重定向)。通常,您会使用一个
HTTPRedirectHandler
,类似于:
>>> opener = urllib.request.build_opener(urllib.request.HTTPRedirectHandler(), urllib.request.HTTPHandler(debuglevel=0))
>>> resp = opener.open('https://google.com')
>>> resp.url
'https://www.google.com/'
不幸的是,URL https://likee.video/@evadecarle.
是一个奇数
一:它 returns 一个 302
状态码,但不包括 Location:
header 识别重定向目标。
因此,urllib
似乎处理不当。
其他人可能会就此纠正我,但它看起来像 requests
库可以毫无问题地处理这个问题:
>>> resp = requests.get('https://likee.video/@evadecarle.')
>>> resp
<Response [302]>
>>> resp.text[:80]
'<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="robots" c'
所以使用 requests
模块可能是最简单的解决方案。