added external header server

pull/1043/head
bwees 2 years ago
parent 52d3d375ba
commit bad0909cc2

@ -4,7 +4,8 @@ import os
import re
import time
import urllib3
import requests
import simplejson
from changedetectionio import content_fetcher, html_tools
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@ -67,6 +68,18 @@ class perform_site_check():
# Tweak the base config with the per-watch ones
request_headers = self.datastore.data['settings']['headers'].copy()
if self.datastore.get_val(uuid, 'external_header_server') is not None:
try:
resp = requests.get(self.datastore.get_val(uuid, 'external_header_server'))
if resp.status_code != 200:
raise Exception("External header server returned non-200 response. Please check the URL for the server")
request_headers.update(resp.json())
except simplejson.errors.JSONDecodeError:
raise Exception("Failed to decode JSON response from external header server")
request_headers.update(extra_headers)
# https://github.com/psf/requests/issues/4525

@ -336,6 +336,7 @@ class watchForm(commonSettingsForm):
title = StringField('Title', default='')
ignore_text = StringListField('Ignore text', [ValidateListRegex()])
external_header_server = fields.URLField('External Header Server', validators=[validateURL()])
headers = StringDictKeyValue('Request headers')
body = TextAreaField('Request body', [validators.Optional()])
method = SelectField('Request method', choices=valid_method, default=default_method)

@ -25,6 +25,7 @@ class model(dict):
'previous_md5': False,
'uuid': str(uuid_builder.uuid4()),
'headers': {}, # Extra headers to send
'external_header_server': None, # URL to a server that will return headers
'body': None,
'method': 'GET',
#'history': {}, # Dict of timestamp and output stripped filename

@ -109,6 +109,12 @@
<div class="pure-control-group" id="request-method">
{{ render_field(form.method) }}
</div>
<div class="pure-control-group" id="external-header-server">
{{ render_field(form.external_header_server, placeholder="http://example.com/watch1") }}
<div class="pure-form-message-inline">
The watch will perform a GET request before each check to this URL and will use the headers in addition to the ones listed below and in global settings. <a href="https://github.com/dgtlmoon/changedetection.io/wiki/Run-JavaScript-before-change-detection">More help and examples here</a>
</div>
</div>
<div class="pure-control-group" id="request-headers">
{{ render_field(form.headers, rows=5, placeholder="Example
Cookie: foobar

Loading…
Cancel
Save