刚毕业的我,跌跌蹱蹱由原来梦想成为一名高级网络工程师变成了现在的运维工程师,虽然只是初级的运维,但我还是想对技术有一定追求,希望自己能成为一名优秀的高级运维工程师。看过一些书,查过一些资料,但最后都没有很顺利形成一种方法,让自己学习效率提高。想来想去,发现自己缺乏总结,由此在这情人节刚要结束的时刻,开始自己的博客书写,希望自己可能形成一个快速高效的学习习惯。同时,希望技术大牛,技术追求者指点一二,互相学习。
座右铭:志在山顶的人,不会贪恋山腰。
马云说:坚持自己的梦想,不断调整自己。不要抱怨,因为别人的抱怨就是你的机会。
Python设置http的header请求访问URL
因为之前写一个shell脚本,用到一个curl命令。
比如:curl -H Host:www.baidu.com http://www.baidu.com/search/error.html -I
目的就是获取URL的Content-Length,所以只要HEAD请求就可以了。在学习python过程中,想获得这样的请求,还费了一番功夫。
在网上看过一篇博客,讲的绑定ip获取URL的信息,由于当时用的pycurl库,所以没有这个功能。当时的脚本摘抄:引用块内容
#/usr/bin/env python
# coding: UTF-8
#@author: rui.xu <mrhaigui@gmail.com>
import sys
import socket
import urllib
import subprocess
from urlparse import urlparse
def fetch_url(URL,host):
url = URL
ip = host
output = urlparse(url)
domain = output[1]
modurl = output[0]+"://"+ip+output[2]+output[3]+output[4]+output[5]
curl_cmd = "curl -A 'Mozilla/5.0 Firefox/8.0' -o /dev/null -m 5 -s -w %{http_code}' '%{size_download}' '%{time_connect}' '%{time_pretransfer}' '%{time_starttransfer}' '%{time_total}"+" -H \"Host:"+domain+"\" "+"\""+modurl+"\""
#print curl_cmd
p = subprocess.Popen(curl_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
(stdoutput,erroutput) = p.communicate()
return url+"\n"+stdoutput
def main():
url = sys.argv[1]
ip = sys.argv[2]
print fetch_url(url,ip)
if __name__ == '__main__':
main()
由于最近看python爬虫的内容,用到了urllib2,发现在可以实现上面的功能。
代码一:
import urllib2
import socket
def send_req(url):
host='www.baidu.com'
# header={'Host':host}
headers = {
'Host':host,#domain and others header
'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Connection':'keep-alive'
}
req=urllib2.Request(url,headers=headers)
req.get_method=lambda: 'HEAD'
res=urllib2.urlopen(req)
#msg=res.msg
# print msg
head=res.headers
content=dict(head)
print 'content-length:%s'%content['content-length']
#data=res.read()
#print data
#print type(data)
#print data
url='http://www.baidu.com/search/error.html'
if __name__=="__main__":
socket.setdefaulttimeout(2)
send_req(url)
返回结果:content-length:17931
代码二:
import urllib2
import socket
def send_req(url):
host='www.baidu.com'
# header={'Host':host}
req=urllib2.Request(url)
req.get_method=lambda: 'HEAD'
req.add_header('Host',host)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0')
res=urllib2.urlopen(req)
#msg=res.msg
# print msg
head=res.headers
content=dict(head)
print 'content-length:%s'%content['content-length']
#data=res.read()
#print data
#print type(data)
#print data
url='http://115.239.211.112/search/error.html'
if __name__=="__main__":
socket.setdefaulttimeout(2)
send_req(url)
返回结果:content-length:17931