urllib2.urlopen 无法获取图像,但浏览器可以
urllib2.urlopen cannot get image, but browser can
有一个linkgif图片,但是urllib2下载不了
import urllib.request as urllib2
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
try:
req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' })
file = urllib2.urlopen(req)
except urllib2.HTTPError as err:
print('HTTP error!!!')
file = err
print(err.code)
except urllib2.URLError as err:
print('URL error!!!')
print(err.reason)
return
data = file.read(1024)
print(data)
脚本完成后,数据仍然为空。为什么会这样?没有 HTTPError,我可以在浏览器控制台中看到有一个有效的 gif 并且 HTTP 响应的状态是 200 OK。谢谢。
您应该检查浏览器发送到服务器的所有 headers。
此页面需要两个 headers:User-Agent
和 Cookie
如果您在 Chrome 或 Firefox 中使用 DevTools
,您通常会看到浏览器(如果还没有 cookie)会收到带有 cookie 和 302 Moved Temporarily
的第一个响应,它会重定向到相同 url 但使用 cookie 然后它接收图像。
你可以试试我的cookie,也许它能收到图像。但是通常你必须做两个请求 - 首先是获取 cookie,第二个(使用 cookie)获取图像。
import urllib.request as urllib2
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
headers = {
'User-Agent': 'Mozilla/5.0',
'Cookie': 'JEB2=583077046E650E2495131DE8FD2F1371',
}
try:
req = urllib2.Request(uri, headers=headers)
f = urllib2.urlopen(req)
except urllib2.HTTPError as err:
print('HTTP error!!!')
f = err
print(err.code)
except urllib2.URLError as err:
print('URL error!!!')
print(err.reason)
data = f.read(1024)
print(data)
如果您使用 requests
模块,那么它会自动完成所有操作,您将不需要两次请求。
import requests
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
headers = {
'User-Agent': 'Mozilla/5.0',
}
r = requests.get(uri, headers=headers)
print(r.content)
有一个linkgif图片,但是urllib2下载不了
import urllib.request as urllib2
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
try:
req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' })
file = urllib2.urlopen(req)
except urllib2.HTTPError as err:
print('HTTP error!!!')
file = err
print(err.code)
except urllib2.URLError as err:
print('URL error!!!')
print(err.reason)
return
data = file.read(1024)
print(data)
脚本完成后,数据仍然为空。为什么会这样?没有 HTTPError,我可以在浏览器控制台中看到有一个有效的 gif 并且 HTTP 响应的状态是 200 OK。谢谢。
您应该检查浏览器发送到服务器的所有 headers。
此页面需要两个 headers:User-Agent
和 Cookie
如果您在 Chrome 或 Firefox 中使用 DevTools
,您通常会看到浏览器(如果还没有 cookie)会收到带有 cookie 和 302 Moved Temporarily
的第一个响应,它会重定向到相同 url 但使用 cookie 然后它接收图像。
你可以试试我的cookie,也许它能收到图像。但是通常你必须做两个请求 - 首先是获取 cookie,第二个(使用 cookie)获取图像。
import urllib.request as urllib2
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
headers = {
'User-Agent': 'Mozilla/5.0',
'Cookie': 'JEB2=583077046E650E2495131DE8FD2F1371',
}
try:
req = urllib2.Request(uri, headers=headers)
f = urllib2.urlopen(req)
except urllib2.HTTPError as err:
print('HTTP error!!!')
f = err
print(err.code)
except urllib2.URLError as err:
print('URL error!!!')
print(err.reason)
data = f.read(1024)
print(data)
如果您使用 requests
模块,那么它会自动完成所有操作,您将不需要两次请求。
import requests
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q'
headers = {
'User-Agent': 'Mozilla/5.0',
}
r = requests.get(uri, headers=headers)
print(r.content)