UrlService add support get headers (#9236)
Javier Pastor committed
Jul 2, 2020 at 13:01 UTC
94ba5445638a1adc44ec0375875f396f5bbfe6ec
1 file changed
+18
-7
collectors/python.d.plugin/python_modules/bases/FrameworkServices/UrlService.py
+18
-7
@@ -120,15 +120,17 @@ class UrlService(SimpleService):
120
:return: str
121
"""
122
try:
123
- status, data = self._get_raw_data_with_status(url, manager, **kwargs)
123
+ response = self._do_request(url, manager, **kwargs)
124
except Exception as error:
125
self.error('Url: {url}. Error: {error}'.format(url=url or self.url, error=error))
126
return None
127
128
- if status == 200:
129
- return data
128
+ if response.status == 200:
129
+ if isinstance(response.data, str):
130
+ return response.data
131
+ return response.data.decode(errors='ignore')
132
else:
131
- self.debug('Url: {url}. Http response status code: {code}'.format(url=url or self.url, code=status))
133
+ self.debug('Url: {url}. Http response status code: {code}'.format(url=url or self.url, code=response.status))
134
return None
135
136
def _get_raw_data_with_status(self, url=None, manager=None, retries=1, redirect=True, **kwargs):
@@ -136,6 +138,17 @@ class UrlService(SimpleService):
138
Get status and response body content from http request. Does not catch exceptions
139
:return: int, str
140
"""
141
+ response = self._do_request(url, manager, retries, redirect, **kwargs)
142
+
143
+ if isinstance(response.data, str):
144
+ return response.status, response.data
145
+ return response.status, response.data.decode(errors='ignore')
146
+
147
+ def _do_request(self, url=None, manager=None, retries=1, redirect=True, **kwargs):
148
+ """
149
+ Get response from http request. Does not catch exceptions
150
+ :return: HTTPResponse
151
+ """
152
url = url or self.url
153
manager = manager or self._manager
154
retry = urllib3.Retry(retries)
@@ -154,9 +167,7 @@ class UrlService(SimpleService):
167
redirect=redirect,
168
**kwargs
169
)
157
- if isinstance(response.data, str):
158
- return response.status, response.data
159
- return response.status, response.data.decode(errors='ignore')
170
+ return response
171
172
def check(self):
173
"""