Python使用——发送Get请求,模拟http请求 & 进行SSH连接服务器

前言

本篇博客是python开发的使用案例博客,结合一些具体的案例进行阐述,本篇博客主要内容是使用Python发送Get请求,模拟http请求,后面可以搞个爬虫出来,另外就是如何使用Python进行SSH连接服务器。

其他相关的博客文章如下:

  • Python开发——工具篇 & Pycharm的相关配置,Python相关操作 & 持续更新

目录

  • 前言
  • 引出
  • python发送get请求
    • 案例1:get请求,间隔1分钟查询,if语法打印
    • 案例2:间隔一定时间,轮流进行get请求,总共2个
  • python进行SSH链接
    • 建立SSH连接核心程序
    • 日志打印附件
  • 总结

引出


1.使用Python发送Get请求,模拟http请求;
2.如何使用Python进行SSH连接服务器;

python发送get请求

案例1:get请求,间隔1分钟查询,if语法打印

import requests
import time
from datetime import datetime

url=f'http://x.x.x.x:8082/sn'     #格式化输出拼接
snTarget = "S231012J0029"

while(True):
    response = requests.get(url=url) 
    snList = response.json()
    current_time = datetime.now()
    if snTarget in snList:
        print("%s 查询到目标sn" %current_time)
    else:
        print("%s 未查到设备sn" %current_time)
    time.sleep(60)

Python使用——发送Get请求,模拟http请求 & 进行SSH连接服务器_第1张图片

案例2:间隔一定时间,轮流进行get请求,总共2个

# encoding:utf-8
import requests
import time
from datetime import datetime

req3 = "http://xxxx"
req4 = "http://xxxx"
reqs = [req3, req4]
vers = ["2.0.3", "2.0.4"]
url = f'http://x.x.x.x:8082/sn'  # 格式化输出拼接
snTarget = "S231012J0029"

while (True):
    response = requests.get(url=url)
    snList = response.json()
    current_time = datetime.now()
    if snTarget in snList:
        print("%s 查询到目标sn" % current_time)
        for ver, req in zip(vers, reqs):
            print("{} 进行版本升级 {}".format(datetime.now(), ver))
            # print("send request :", req)
            resp = requests.get(url=req).json()
            print(resp)
            time.sleep(430)
    else:
        print("%s 未查到设备sn" % current_time)
    time.sleep(60)

python进行SSH链接

Python使用——发送Get请求,模拟http请求 & 进行SSH连接服务器_第2张图片

建立SSH连接核心程序

import paramiko
from paramiko.client import SSHClient
import time
import logging
import utils.LogUtils


# 设置日志日期格式
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.DEBUG)


# main主方法
def ssh_hi(client: SSHClient):
    # 执行命令
    stdin, stdout, stderr = \
        client.exec_command("grep -E 'RegSWVersion|onResponse' /root/logs/sys-debug.log |grep -v 1.1 | tail -n 1")
    # 打印命令输出
    resp = stdout.read().decode()
    logging.info(resp)
    if "2.0.4" in resp:
        logging.warning("当前版本为2.0.4, 版本改为2.0.3")
    elif "2.0.3" in resp:
        logging.warning("当前版本为2.0.3, 版本改为2.0.4")
    else:
        logging.warning("需要上位机刷新版本")


# 关闭连接
def closeSSH(client: SSHClient):
    client.close()


# 建立连接
def buildSSH():
    # 创建SSH客户端
    client = paramiko.SSHClient()
    # 自动添加主机名和密钥到本地的known_hosts文件
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接SSH服务器
    client.connect('ip', port=22, username='username', password='password')
    return client


if __name__ == '__main__':
    ssh = buildSSH()
    while(True):
        ssh_hi(ssh)
        time.sleep(120)

        # closeSSH(ssh)

日志打印附件

#!/usr/bin/env python
# encoding: utf-8
import logging


# now we patch Python code to add color support to logging.StreamHandler
def add_coloring_to_emit_windows(fn):
  # add methods we need to the class
  def _out_handle(self):
    import ctypes
    return ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)

  out_handle = property(_out_handle)

  def _set_color(self, code):
    import ctypes
    # Constants from the Windows API
    self.STD_OUTPUT_HANDLE = -11
    hdl = ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)
    ctypes.windll.kernel32.SetConsoleTextAttribute(hdl, code)

  setattr(logging.StreamHandler, '_set_color', _set_color)

  def new(*args):
    FOREGROUND_BLUE = 0x0001 # text color contains blue.
    FOREGROUND_GREEN = 0x0002 # text color contains green.
    FOREGROUND_RED = 0x0004 # text color contains red.
    FOREGROUND_INTENSITY = 0x0008 # text color is intensified.
    FOREGROUND_WHITE = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
    # winbase.h
    STD_INPUT_HANDLE = -10
    STD_OUTPUT_HANDLE = -11
    STD_ERROR_HANDLE = -12

    # wincon.h
    FOREGROUND_BLACK = 0x0000
    FOREGROUND_BLUE = 0x0001
    FOREGROUND_GREEN = 0x0002
    FOREGROUND_CYAN = 0x0003
    FOREGROUND_RED = 0x0004
    FOREGROUND_MAGENTA = 0x0005
    FOREGROUND_YELLOW = 0x0006
    FOREGROUND_GREY = 0x0007
    FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.

    BACKGROUND_BLACK = 0x0000
    BACKGROUND_BLUE = 0x0010
    BACKGROUND_GREEN = 0x0020
    BACKGROUND_CYAN = 0x0030
    BACKGROUND_RED = 0x0040
    BACKGROUND_MAGENTA = 0x0050
    BACKGROUND_YELLOW = 0x0060
    BACKGROUND_GREY = 0x0070
    BACKGROUND_INTENSITY = 0x0080 # background color is intensified.

    levelno = args[1].levelno
    if (levelno >= 50):
      color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY
    elif (levelno >= 40):
      color = FOREGROUND_RED | FOREGROUND_INTENSITY
    elif (levelno >= 30):
      color = FOREGROUND_YELLOW | FOREGROUND_INTENSITY
    elif (levelno >= 20):
      color = FOREGROUND_GREEN
    elif (levelno >= 10):
      color = FOREGROUND_MAGENTA
    else:
      color = FOREGROUND_WHITE
    args[0]._set_color(color)

    ret = fn(*args)
    args[0]._set_color(FOREGROUND_WHITE)
    # print "after"
    return ret

  return new


def add_coloring_to_emit_ansi(fn):
  # add methods we need to the class
  def new(*args):
    levelno = args[1].levelno
    if (levelno >= 50):
      color = '\x1b[31m' # red
    elif (levelno >= 40):
      color = '\x1b[31m' # red
    elif (levelno >= 30):
      color = '\x1b[33m' # yellow
    elif (levelno >= 20):
      color = '\x1b[32m' # green
    elif (levelno >= 10):
      color = '\x1b[35m' # pink
    else:
      color = '\x1b[0m' # normal
    try:
      args[1].msg = color + args[1].msg + '\x1b[0m' # normal
    except Exception as e:
      pass
    # print "after"
    return fn(*args)

  return new


import platform

if platform.system() == 'Windows':
  # Windows does not support ANSI escapes and we are using API calls to set the console color
  logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit)
else:
  # all non-Windows platforms are supporting ANSI escapes so we use them
  logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit)
  # log = logging.getLogger()
  # log.addFilter(log_filter())
  # //hdlr = logging.StreamHandler()
  # //hdlr.setFormatter(formatter())

总结

1.使用Python发送Get请求,模拟http请求;
2.如何使用Python进行SSH连接服务器;

你可能感兴趣的:(python,python,http,ssh)