docs: def _http_get(self, url):
          """
          Make an HTTP GET request to the specified URL and return the response.
  
          Retries
          -------
          The constructor of this class takes an argument specifying the number
          of times to retry a GET. The statuses which are retried on are: 408,
          500, 502, 503, and 504.
  
          Returns
          -------
          An HTTP response, containing response headers and content.
  
          Exceptions
          ----------
          * PythonKCMeetupsBadResponse
          * PythonKCMeetupsMeetupDown
          * PythonKCMeetupsRateLimitExceeded
  
          """
          for try_number in range(self._http_retries + 1):
              response = requests.get(url, timeout=self._http_timeout)
              if response.status_code == 200:
                  return response
  
              if (try_number >= self._http_retries or
                      response.status_code not in (408, 500, 502, 503, 504)):
  
                  if response.status_code >= 500:
                      raise PythonKCMeetupsMeetupDown(response, response.content)
                  if response.status_code == 400:
                      try:
                          data = json.loads(response.content)
                          if data.get('code', None) == 'limit':
                              raise PythonKCMeetupsRateLimitExceeded
                      except:  # Don't lose original error when JSON is bad
                          pass
                  raise PythonKCMeetupsBadResponse(response, response.content)