看了两天的403,forbidden。。。。禁止禁止,这是一件痛苦的感觉。。。。




1、 背景介绍

    在使用web的时候,第一步就是要擅长构建请求request,然后得到响应response,从而就有了用django提供一个接口,然后在另外一个脚本中发送相关的请求到接口中,将数据保存在数据库中


    这种最实用的场景就是,采集各个服务器上的信息,然后将数据保存在数据库中,成为历史数据


    在进行传输数据的时候,使用两种方式,一种是使用GET方法将数据传送到数据库,一种是使用POST方法来进行传输数据,两者之间最大的差别就是,在使用GET方法的时候,是将所有的数据通过url拼接的方式来进行传送;而post方式则是通过表单的方式来进行传送。


2、 django的配置

    

    在django中,主要就是提供访问的接口url,然后就是处理的方法views,然后就是保存在数据库中模型


    具体的代码如下所示:

    urls.py:仅仅提供一个url来进行访问,那就是首页,如下:

urlpatterns = [

    url(r'^$',index),

]

    

    views.py:提供一个方法来进行保存数据,如下所示(代码未经整理,测试代码):

@ensure_csrf_cookie (强制使用csrf保护机制

#@csrf_exempt

def index(request):

    print request.COOKIES

    print request.path

    ip = request.GET.get('hostip')

    if ip: (处理GET方法

        boot_time = request.GET.get('boot_time')

        mem_total = request.GET.get('mem_total')

        mem_free =request.GET.get('mem_free')

        hostcpu = HostCPU(hostip=ip,boot_time=boot_time,mem_total=mem_total,mem_free=mem_free)

        hostcpu.save()

        return HttpResponse('GET method')

    ip = request.POST.get('hostip')

    if ip: (处理POST方法

        boot_time = request.POST.get('boot_time')

        mem_total = request.POST.get('mem_total')

        mem_free =request.POST.get('mem_free')

        hostcpu = HostCPU(hostip=ip,boot_time=boot_time,mem_total=mem_total,mem_free=mem_free)

        hostcpu.save()

    return HttpResponse("POST method NANA")


    数据库模型,如下所示:

class HostCPU(models.Model):

    hostip = models.GenericIPAddressField()

    boot_time = models.DateTimeField()

    mem_total = models.CharField(max_length=100)

    mem_free =models.CharField(max_length=100)


    3、 采集的脚本


    采集的脚本GET方法的代码如下:

while True:

    mem = psutil.virtual_memory()

#   boot_time = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d %H:%M:%S')

    data = {

        'hostip':'192.168.249.236',

        'mem_total':str(mem.total),

        'mem_free':str(mem.free),

        'boot_time':str(boot_time),

    }

    url = "http://192.168.249.10:9999/kel/"

    data = urllib.urlencode(data)

    url = "http://192.168.249.10:9999/kel/?"+"hostip=192.168.249.236"+"&mem_total="+str(mem.total)+"&mem_free="+str(mem.free)+"&boot_time="+boot_time

    urllib.urlopen(url,data=data)

    time.sleep(3)

    

    在使用GET方法的时候,直接数据放在url中,然后发送请求进行接收


    采集的脚本的POST方法的代码如下:

while True:

    mem = psutil.virtual_memory()

    boot_time = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d %H:%M:%S')

    data = {

        'hostip':'192.168.249.236',

        'mem_total':str(mem.total),

        'mem_free':str(mem.free),

        'boot_time':str(boot_time),

    }

    cj = cookielib.CookieJar()

    handler=urllib2.HTTPCookieProcessor(cj)

    opener = urllib2.build_opener(handler,urllib2.HTTPHandler)

    urllib2.install_opener(opener)

    url = "http://192.168.249.10:9999/kel/"

    data =urllib.urlencode(data)

    response = urllib2.urlopen(url)

    headers = {

        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",

        "Host":"192.168.249.10:9999",

        }

    req = urllib2.Request(url,data,headers=headers)

    content = urllib2.urlopen(req)

    break

    time.sleep(3)


    在使用POST方法的时候,使用cookie的主要目的是为了获取到csrf的token值,但是。。。。并没有搞定,从而要想POST方法能够运行,只能将view方法中的csrf检测进行关闭,也就是开启@csrf_exempt注释即可。


    4、 查看数据库保存

    最后数据库中保存的数据如下:

左右互搏_java

    

    最简单的数据采集方式,如果做大了,那么可以将每个服务器上的相关机器信息采集起来,从而做到监控的效果,这也是那些监控系统的由来,例如zabbix和nagios等。


    5、 未完成的问题


    在使用post请求的时候,无法提交,csrf会拒绝这个请求。

    出现的错误如下:

左右互搏_java_02


左右互搏_java_03


    如果有人能解决,联系我。。。。