diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index f6a9e74..a162d14 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,11 @@
 httsleep Changelog
 ==================
 
+Version NEXT
+-------------
+* The kwarg ``verify`` is now supported, allowing users of httsleep to specify
+  ``verify=False`` in the same way as when directly using the ``requests`` library.
+
 Version 0.2.0
 -------------
 * The shorthand kwargs (``status_code``, ``json``, ``jsonpath``, ``text``, ``callback``)
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d7dbbc4..cbc5a7d 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1,2 +1,3 @@
 Aengus Walton <ventolin@gmail.com>
 Patrick Mühlbauer <patrick@opentrash.org>
+Oliver Lockwood <oliver.lockwood@cantab.net>
diff --git a/httsleep/main.py b/httsleep/main.py
index fd607f1..649d5ed 100644
--- a/httsleep/main.py
+++ b/httsleep/main.py
@@ -34,6 +34,9 @@ class HttSleeper(object):
                      function that takes the response as an argument returning True.
     :param auth: a (username, password) tuple for HTTP authentication.
     :param headers: a dict of HTTP headers.
+    :param verify: Either a boolean, in which case it controls whether we verify the server's
+                   TLS certificate, or a string, in which case it must be a path to a CA
+                   bundle to use. Defaults to ``True``.
     :param polling_interval: how many seconds to sleep between requests.
     :param max_retries: the maximum number of retries to make, after which
                         a StopIteration exception is raised.
@@ -46,7 +49,7 @@ class HttSleeper(object):
     """
     def __init__(self, url_or_request, until=None, alarms=None,
                  status_code=None, json=None, jsonpath=None, text=None, callback=None,
-                 auth=None, headers=None,
+                 auth=None, headers=None, verify=True,
                  polling_interval=DEFAULT_POLLING_INTERVAL,
                  max_retries=DEFAULT_MAX_RETRIES,
                  ignore_exceptions=None,
@@ -84,6 +87,7 @@ class HttSleeper(object):
                          'jsonpath': jsonpath, 'text': text, 'callback': callback}
             until.append({k: v for k, v in condition.items() if v})
 
+        self.verify = verify
         self.until = until
         self.alarms = alarms
         self.polling_interval = int(polling_interval)
@@ -145,7 +149,7 @@ class HttSleeper(object):
         """
         while True:
             try:
-                response = self.session.send(self.request.prepare())
+                response = self.session.send(self.request.prepare(), verify=self.verify)
                 for condition in self.alarms:
                     if self.meets_condition(response, condition):
                         raise Alarm(response, condition)
@@ -192,9 +196,9 @@ class HttSleeper(object):
         return True
 
 
-def httsleep(url_or_request, until=None, alarms=None,
-             status_code=None, json=None, jsonpath=None, text=None, callback=None,
-             auth=None, headers=None,
+def httsleep(url_or_request, until=None, alarms=None, status_code=None,
+             json=None, jsonpath=None, text=None, callback=None,
+             auth=None, headers=None, verify=True,
              polling_interval=DEFAULT_POLLING_INTERVAL,
              max_retries=DEFAULT_MAX_RETRIES,
              ignore_exceptions=None,
@@ -207,7 +211,9 @@ def httsleep(url_or_request, until=None, alarms=None,
     return HttSleeper(
         url_or_request, until=until, alarms=alarms, status_code=status_code,
         json=json, jsonpath=jsonpath, text=text, callback=callback,
-        auth=auth, headers=headers, polling_interval=polling_interval,
-        max_retries=max_retries, ignore_exceptions=ignore_exceptions,
+        auth=auth, headers=headers, verify=verify,
+        polling_interval=polling_interval,
+        max_retries=max_retries,
+        ignore_exceptions=ignore_exceptions,
         loglevel=loglevel
     ).run()

Support `verify=False` usage as per requests library
It's not currently possible to use `httsleep` and ignore certificate errors, as you would with `requests.get(..., verify=False)`.

This looks fairly simple to add so I'll try to follow this with a PR and hopefully we can improve things.
diff --git a/tests/test_init.py b/tests/test_init.py
index 513fe3f..d367d77 100644
--- a/tests/test_init.py
+++ b/tests/test_init.py
@@ -35,6 +35,16 @@ def test_headers():
     assert obj.request.headers == headers
 
 
+def test_default_verify():
+    obj = HttSleeper(URL, CONDITION)
+    assert obj.verify == True
+
+
+def test_verify():
+    obj = HttSleeper(URL, CONDITION, verify=False)
+    assert obj.verify == False
+
+
 def test_ignore_exceptions_default_value():
     obj = HttSleeper(URL, CONDITION)
     assert obj.ignore_exceptions == tuple()
diff --git a/tests/test_run.py b/tests/test_run.py
index 7a708d1..24f59ff 100644
--- a/tests/test_run.py
+++ b/tests/test_run.py
@@ -5,6 +5,7 @@ from jsonpath_rw.jsonpath import Fields
 import mock
 import pytest
 from requests.exceptions import ConnectionError
+from requests import Response
 
 from httsleep.main import HttSleeper, Alarm, DEFAULT_POLLING_INTERVAL
 
@@ -22,6 +23,36 @@ def test_run_success():
         assert not mock_sleep.called
 
 
+@httpretty.activate
+def test_propagate_verify():
+    """Should tell requests to skip SSL verification if verify==False"""
+    resp = Response()
+    resp.status_code = 200
+    httsleep = HttSleeper(URL, {'status_code': 200}, verify=False)
+    with mock.patch('requests.sessions.Session.send') as mock_session_send:
+        mock_session_send.return_value = resp
+        httsleep.run()
+        assert mock_session_send.called
+        args, kwargs = mock_session_send.call_args
+    assert 'verify' in kwargs
+    assert kwargs['verify'] == False
+
+
+@httpretty.activate
+def test_default_sends_verify_true():
+    """Should not send a value for 'verify' to requests by default"""
+    resp = Response()
+    resp.status_code = 200
+    httsleep = HttSleeper(URL, {'status_code': 200})
+    with mock.patch('requests.sessions.Session.send') as mock_session_send:
+        mock_session_send.return_value = resp
+        httsleep.run()
+        assert mock_session_send.called
+        args, kwargs = mock_session_send.call_args
+    assert 'verify' in kwargs
+    assert kwargs['verify'] == True
+
+
 @httpretty.activate
 def test_run_alarm():
     """Should raise an Alarm when a failure criteria has been reached"""

pip install -e .
parse_log_pytest
requirements.txt
pytest httpretty mock
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
decorator==5.2.1
exceptiongroup==1.2.2
httpretty==1.1.4
-e git+https://github.com/kopf/httsleep.git@969f30c9a77519e05434e1c46dd486c066c1002a#egg=httsleep
idna==3.10
iniconfig==2.1.0
jsonpath-rw==1.4.0
mock==5.2.0
packaging==24.2
pluggy==1.5.0
ply==3.11
pytest==8.3.5
requests==2.32.3
six==1.17.0
tomli==2.2.1
urllib3==2.3.0

name: httsleep
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - decorator==5.2.1
      - exceptiongroup==1.2.2
      - httpretty==1.1.4
      - idna==3.10
      - iniconfig==2.1.0
      - jsonpath-rw==1.4.0
      - mock==5.2.0
      - packaging==24.2
      - pluggy==1.5.0
      - ply==3.11
      - pytest==8.3.5
      - requests==2.32.3
      - six==1.17.0
      - tomli==2.2.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/httsleep

tests/test_init.py::test_default_verify tests/test_init.py::test_verify tests/test_run.py::test_propagate_verify tests/test_run.py::test_default_sends_verify_true
tests/test_run.py::test_run_sleep_default_interval tests/test_run.py::test_run_sleep_custom_interval
tests/test_init.py::test_request_built_from_url tests/test_init.py::test_url_or_request tests/test_init.py::test_auth tests/test_init.py::test_headers tests/test_init.py::test_ignore_exceptions_default_value tests/test_init.py::test_max_retries tests/test_init.py::test_until tests/test_init.py::test_empty_until tests/test_init.py::test_invalid_until tests/test_init.py::test_status_code_cast_as_int tests/test_init.py::test_alarms tests/test_init.py::test_invalid_alarms tests/test_init.py::test_status_code_cast_as_int_in_alarm tests/test_init.py::test_kwarg_condition tests/test_run.py::test_run_success tests/test_run.py::test_run_alarm tests/test_run.py::test_run_success_alarm tests/test_run.py::test_run_retries tests/test_run.py::test_run_max_retries tests/test_run.py::test_ignore_exceptions tests/test_run.py::test_json_condition tests/test_run.py::test_text_condition tests/test_run.py::test_jsonpath_condition tests/test_run.py::test_precompiled_jsonpath_expression tests/test_run.py::test_jsonpath_condition_multiple_values tests/test_run.py::test_multiple_jsonpath_conditions tests/test_run.py::test_callback_condition tests/test_run.py::test_multiple_success_conditions tests/test_run.py::test_multiple_alarms
httsleep/main.py CHANGELOG.rst CONTRIBUTORS
httsleep/main.py CHANGELOG.rst CONTRIBUTORS