Skip to content

Commit 87a0688

Browse files
committed
Consolidate all Shodan methods to use the internal _request method instead of sometimes using the shodan.helpers.api_request method.
New environment variable SHODAN_API_URL that can be used to overwrite the base_url used for the API requests.
1 parent a08353e commit 87a0688

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
setup(
1111
name='shodan',
12-
version='1.30.1',
12+
version='1.31.0',
1313
description='Python library and command-line utility for Shodan (https://developer.shodan.io)',
1414
long_description=README,
1515
long_description_content_type='text/x-rst',

shodan/client.py

+19-11
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
:copyright: (c) 2014- by John Matherly
99
"""
1010
import math
11+
import os
1112
import time
1213

1314
import requests
1415
import json
1516

1617
from .exception import APIError
17-
from .helpers import api_request, create_facet_string
18+
from .helpers import create_facet_string
1819
from .stream import Stream
1920

2021

@@ -314,11 +315,15 @@ def __init__(self, key, proxies=None):
314315
self._session = requests.Session()
315316
self.api_rate_limit = 1 # Requests per second
316317
self._api_query_time = None
318+
317319
if proxies:
318320
self._session.proxies.update(proxies)
319321
self._session.trust_env = False
322+
323+
if os.environ.get('SHODAN_API_URL'):
324+
self.base_url = os.environ.get('SHODAN_API_URL')
320325

321-
def _request(self, function, params, service='shodan', method='get'):
326+
def _request(self, function, params, service='shodan', method='get', json_data=None):
322327
"""General-purpose function to create web requests to SHODAN.
323328
324329
Arguments:
@@ -348,7 +353,13 @@ def _request(self, function, params, service='shodan', method='get'):
348353
try:
349354
method = method.lower()
350355
if method == 'post':
351-
data = self._session.post(base_url + function, params)
356+
if json_data:
357+
data = self._session.post(base_url + function, params=params,
358+
data=json.dumps(json_data),
359+
headers={'content-type': 'application/json'},
360+
)
361+
else:
362+
data = self._session.post(base_url + function, params)
352363
elif method == 'put':
353364
data = self._session.put(base_url + function, params=params)
354365
elif method == 'delete':
@@ -711,8 +722,7 @@ def create_alert(self, name, ip, expires=0):
711722
'expires': expires,
712723
}
713724

714-
response = api_request(self.api_key, '/shodan/alert', data=data, params={}, method='post',
715-
proxies=self._session.proxies)
725+
response = self._request('/shodan/alert', params={}, json_data=data, method='post')
716726

717727
return response
718728

@@ -732,8 +742,7 @@ def edit_alert(self, aid, ip):
732742
},
733743
}
734744

735-
response = api_request(self.api_key, '/shodan/alert/{}'.format(aid), data=data, params={}, method='post',
736-
proxies=self._session.proxies)
745+
response = self._request('/shodan/alert/{}'.format(aid), params={}, json_data=data, method='post')
737746

738747
return response
739748

@@ -744,18 +753,17 @@ def alerts(self, aid=None, include_expired=True):
744753
else:
745754
func = '/shodan/alert/info'
746755

747-
response = api_request(self.api_key, func, params={
756+
response = self._request(func, params={
748757
'include_expired': include_expired,
749-
}, proxies=self._session.proxies)
758+
})
750759

751760
return response
752761

753762
def delete_alert(self, aid):
754763
"""Delete the alert with the given ID."""
755764
func = '/shodan/alert/{}'.format(aid)
756765

757-
response = api_request(self.api_key, func, params={}, method='delete',
758-
proxies=self._session.proxies)
766+
response = self._request(func, params={}, method='delete')
759767

760768
return response
761769

0 commit comments

Comments
 (0)