Headers
有些网站不允许应用程序直接访问,一旦发现是程序在访问,则站点不会响应。为了模拟浏览器的工作方式,需要设置Headers。打开浏览器,按F12,打开网络监听。
User-Agent:Mozilla/5.0 (X11; Linux x86_64)
其中,user_agent即为请求身份,如果没有写入请求身份,服务器可能不会响应,因此在headers中设置user_agent。
import urllib
import urllib2
url = 'https://www.zhihu.com/topic/19550228/top-answers'
User-Agent:Mozilla/5.0 (X11; Linux x86_64)
values = {'username' : 'xiaoming', 'password' : 'XXXX' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
page = response.read()
通过加入headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。
再进一步,对付防盗链,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应,因此headers中加入referer。
headers = { 'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64)' ,'Referer':'http://www.zhihu.com/articles' }