8
8
:copyright: (c) 2014- by John Matherly
9
9
"""
10
10
import math
11
+ import os
11
12
import time
12
13
13
14
import requests
14
15
import json
15
16
16
17
from .exception import APIError
17
- from .helpers import api_request , create_facet_string
18
+ from .helpers import create_facet_string
18
19
from .stream import Stream
19
20
20
21
@@ -314,11 +315,15 @@ def __init__(self, key, proxies=None):
314
315
self ._session = requests .Session ()
315
316
self .api_rate_limit = 1 # Requests per second
316
317
self ._api_query_time = None
318
+
317
319
if proxies :
318
320
self ._session .proxies .update (proxies )
319
321
self ._session .trust_env = False
322
+
323
+ if os .environ .get ('SHODAN_API_URL' ):
324
+ self .base_url = os .environ .get ('SHODAN_API_URL' )
320
325
321
- def _request (self , function , params , service = 'shodan' , method = 'get' ):
326
+ def _request (self , function , params , service = 'shodan' , method = 'get' , json_data = None ):
322
327
"""General-purpose function to create web requests to SHODAN.
323
328
324
329
Arguments:
@@ -348,7 +353,13 @@ def _request(self, function, params, service='shodan', method='get'):
348
353
try :
349
354
method = method .lower ()
350
355
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 )
352
363
elif method == 'put' :
353
364
data = self ._session .put (base_url + function , params = params )
354
365
elif method == 'delete' :
@@ -711,8 +722,7 @@ def create_alert(self, name, ip, expires=0):
711
722
'expires' : expires ,
712
723
}
713
724
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' )
716
726
717
727
return response
718
728
@@ -732,8 +742,7 @@ def edit_alert(self, aid, ip):
732
742
},
733
743
}
734
744
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' )
737
746
738
747
return response
739
748
@@ -744,18 +753,17 @@ def alerts(self, aid=None, include_expired=True):
744
753
else :
745
754
func = '/shodan/alert/info'
746
755
747
- response = api_request ( self .api_key , func , params = {
756
+ response = self ._request ( func , params = {
748
757
'include_expired' : include_expired ,
749
- }, proxies = self . _session . proxies )
758
+ })
750
759
751
760
return response
752
761
753
762
def delete_alert (self , aid ):
754
763
"""Delete the alert with the given ID."""
755
764
func = '/shodan/alert/{}' .format (aid )
756
765
757
- response = api_request (self .api_key , func , params = {}, method = 'delete' ,
758
- proxies = self ._session .proxies )
766
+ response = self ._request (func , params = {}, method = 'delete' )
759
767
760
768
return response
761
769
0 commit comments