Python设置http的header请求访问URL

刚毕业的我,跌跌蹱蹱由原来梦想成为一名高级网络工程师变成了现在的运维工程师,虽然只是初级的运维,但我还是想对技术有一定追求,希望自己能成为一名优秀的高级运维工程师。看过一些书,查过一些资料,但最后都没有很顺利形成一种方法,让自己学习效率提高。想来想去,发现自己缺乏总结,由此在这情人节刚要结束的时刻,开始自己的博客书写,希望自己可能形成一个快速高效的学习习惯。同时,希望技术大牛,技术追求者指点一二,互相学习。
座右铭:志在山顶的人,不会贪恋山腰。
马云说:坚持自己的梦想,不断调整自己。不要抱怨,因为别人的抱怨就是你的机会。

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

http://urllib2详解请点击

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值