解决本地Linux使用python2将数据post到本地django服务器

首先明确一下自己在做什么:
我想要在一个本地Linux机器上面抓取一些数据(脚本使用python2实现),并且把抓取到的数据通过requests.post发送到我部署在windows上的django服务器上面。

一开始遇到的问题:
因为django是默认打开127.0.0.1:8000这个url的,所以一开始也没有增加改动,但是当我post的时候,本地机器报错:这里要说明一下,一开是我的url是:127.0.0.1:8000,这个是后来改了的。说我连接被拒绝了,wtf?
试了很多办法,比如关闭selinux,关闭iptables等等都不行,最后想到,在post数据的时候,不是发送到127.0.0.1:8000,因为在Linux上面post到127.0.0.1是post到了这一台Linux机器自己的地址(因为127.0.0.1是代表本地地址的),根本就没有发送到我django的机器上面,我的django是在windows上面的pycharm运行的,django的127.0.0.1其实指的是我Windows本地连接的ipv4地址:
我的地址是192.168.2.144
所以我更改了我脚本里面要post到的地址,也就是更改为了192.168.2.144,post成功。

	下面贴一下自己的代码:
	1.Linux机器上抓取数据的脚本
	**这里要注意:
	requests模块发送请求有data、params两种携带参数的方法。
	params在get请求中使用,data在post请求中使用。
	**
#!/usr/bin/env python
#coding:utf-8
import sys
import os
import urllib, httplib
from datetime import datetime
import psutil
import logging
import socket
import requests

url = "http://192.168.2.144:8000/monitor_data/getdata/"
headers = {"Content-Type":"application/json"}
#执行的结果放入log
logging.basicConfig(level=logging.DEBUG,
	format='%(asctime)s [%(levelname)s] %(message)s',
	filename=sys.path[0]+'/omsys.log',
	filemode='a')
#用post发送数据
def post_metric(http_param=""):
    try:
	response = requests.post(url=url, data=http_param)
	print response.status_code
#	f = open('response_page.txt', 'w')
#	f.write(response.read())
#	if response.status_code != 200:
#	    logging.error('response http status error:'+str(response.bad_r.status_code))
#	    sys.exit()
    except Exception as e:
	logging.error('connection django server error'+str(e))
	sys.exit()
#   finally:
#	if http_client:
#	    http_client.close()
#	else:
#	    logging.error('connection unknow error')
#	    sys.exit()
#利用util获取本机ip
def get_netcard():
    netcard_info = []
    info = psutil.net_if_addrs()
    for k,v in info.items():
        for item in v:
            if item[0] == 2 and not item[1]=='127.0.0.1':
                netcard_info.append((k,item[1]))
    return netcard_info
myip = get_netcard()[0][1]
History_Id = int(24)
#将当前时间转换为字符串类型
History_datetime = str(datetime.now())
#获取本地cpu负载中的过去一分钟的负载平均值
History_cpu_load = int(os.getloadavg()[0])
#利用psutil获取磁盘使用,内存使用
History_disk_usage = int(psutil.disk_usage("/")[3])
History_memory_usage = int(psutil.virtual_memory()[2])
payload = {
	"id": History_Id,
	"history_ip": myip,
	"history_datetime": History_datetime,
	"history_cpu_load": History_cpu_load,
	"history_disk_usage": History_disk_usage,
	"history_memory_usage": History_memory_usage
}
#调用post_metric函数,并传入编码好的数据
post_metric(payload)

2.django端接收数据(views.py)

@csrf_exempt
@api_view(['GET', 'POST'])
def getdata(request, format=None):
    if request.method == 'GET':
        serverparameter = ServerParameter.objects.all().order_by('-id')
        serializer = MySerializer(serverparameter, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = MySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            try:
                if float(serializer.data.get('history_disk_usage')) > 10.0:
                    print("报警:磁盘使用率过高!")
                    send_mail(
                        subject='报警邮件',
                        message='磁盘使用率过高',
                        from_email='531904940@qq.com',
                        recipient_list=['958749352@qq.com'],
                        fail_silently=False
                    )
                if float(serializer.data.get('history_cpu_load')) > 10.0:
                    print("报警:cpu负载过高!")
                    send_mail(
                        subject='报警邮件',
                        message='cpu负载过高',
                        from_email='531904940@qq.com',
                        recipient_list=['958749352@qq.com'],
                        fail_silently=False
                    )
                if float(serializer.data.get('history_memory_usage')) > 10.0:
                    print("报警:内存使用率过高!")
                    send_mail(
                        subject='报警邮件',
                        message='内存使用率过高',
                        from_email='531904940@qq.com',
                        recipient_list=['958749352@qq.com'],
                        fail_silently=False
                    )
            except Exception as e:
                return HttpResponse("入库失败,请与亲爱的晋哥联系" + str(e))

            return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值