ZoomEye API调用:
因为ZoomEye API 很难用,加入重试机制后,请求还是会一直500,所以没有加入请求重试机制。可以自行加入,或者增加一个时间长度的重试。
尽量避免大量请求API 经测试,1秒1次都会报500。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Author spkiddai
"""
import json
import requests
import configparser
class ZoomEyeUnit():
def __init__(self):
self.config = self.read_config()#读取配置文件配置
self.headers = self.create_token() #生成Access_TOKEN的header
#配置文件内容 用户、密码、API接口地址
def read_config(self):
result = {}
config = configparser.ConfigParser()
config.read("Config.ini")
result['user'] = config['ZoomEye Login']['USER']
result['pass'] = config['ZoomEye Login']['PASS']
result['login'] = config['ZoomEye API']['Login']
result['info'] = config['ZoomEye API']['Info']
result['host'] = config['ZoomEye API']['Host']
result['web'] = config['ZoomEye API']['Web']
return result
#生成Token,用户名密码登录login接口
def create_token(self):
data = json.dumps({"username":self.config['user'],"password":self.config['pass']})
response = self.req_post(self.config['login'],data=data)
header = {"Authorization": "JWT %s" % (response["access_token"])}
return header
#用户信息接口:无需参数传入
def info(self):
response = ZoomEyeUnit.req_get(self.config['info'],header=self.headers)
return response
#主机搜索接口:需传入参数 query查询表达式 示例:prrt:8080 page页码 示例:1 facets排序 示例:app,os
def Host_search(self,query,page=None,facets=None):
params = {"query" : query }
if page:
params.update({"page" : str(page)})
if facets:
params.update({"facets" : facets})
response = self.req_get(self.config['host'],params,self.headers)
return response
#Web搜索接口:需传入参数 query查询表达式 示例:prrt:8080 page页码 示例:1 facets排序 示例:app,os
def Web_search(self,query,page=None,facets=None):
params = { "query" : query }
if page:
params.update({"page" : str(page)})
if facets:
params.update({"facets" : facets})
response = self.req_get(self.config['web'],params,self.headers)
return response
@staticmethod
def req_get(url, params=None, header=None):
try:
response = requests.get(url=url, params=params, headers=header)
if response.status_code == 200:
return response.json()
else:
print('[-ERROR]:' + str(response.status_code) + response.text)
exit(0)
except Exception as e:
raise ('[-ERROR]:' + e)
@staticmethod
def req_post(url, data, header=None):
try:
response = requests.post(url=url, data=data, headers=header)
if response.status_code == 200:
return response.json()
else:
print('[-ERROR]:' + str(response.status_code) + response.text)
exit(0)
except Exception as e:
raise ('[-ERROR]:' + e)
配置读取为Config.ini的配置文件:
[ZoomEye Login]
USER = test
PASS = test
[ZoomEye API]
Login = https://api.zoomeye.org/user/login
Info = https://api.zoomeye.org/resources-info
Host = https://api.zoomeye.org/host/search
Web = https://api.zoomeye.org/web/search
调用方法:
z = ZoomEyeUnit()
result = z.Host_search("port:8080"",page=1)
print(result)
github地址:https://github.com/spkiddai/ZoomEyeUnit
说明:个人制作,仅供学习使用,不可用于商业用途,如有版权问题,请联系删除,切勿将代码内容用于任何违法行为。