Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTPSConnectionPool Max retries exceeded

I've got a django app in production running on nginx/uwsgi. We recently started using SSL for all our connections. Since moving to SSL, I often get the following message:

HTTPSConnectionPool(host='foobar.com', port=443): 
    Max retries exceeded with url: /foo/bar

Essentially what happens is I've got the browser communicating with django server code, which then uses the requests library to call an api. Its the connection to the api that generates the error. Also, I've moved all our requests into one session (a requests session, that is), but this hasn't helped.

I've bumped up the number of uwsgi listeners since I thought that could be the problem, but our load isn't that high. Also, we never had this problem before SSL. Does anyone have some advice as to how to solve this problem?

Edit

Code snippet of how I call the API. I've posted it (mostly) verbatim. Note its not the code that actually fails, but the requests library that throws an exception when calling self.session.post

def save_answer(self):
    logger.info("Saving answer to question")
    url = "%s1.0/exam/learneranswer/" % self.api_url
    response = {'success': False}

    data = {'questionorder': self.request.POST.get('questionorder'),
            'paper': self.request.POST.get('paper')}
    data['answer'] = ",".join(self.request.POST.getlist('answer'))
    r = self.session.post(url, data=simplejson.dumps(data))
    if r.status_code == 201:
        logger.info("Answer saved successfully")
        response['success'] = True
    elif r.status_code == 400:
        if r.text == "Paper expired":
            logger.warning("Timer has expired")
            response['message'] = 'Your time has run out'
        if r.text == "Question locked":
            response['message'] = \
                'This question is locked and cannot be answered anymore'
        else:
            logger.error("Unknown error")
            self.log_error(r, "Unknown Error while saving answer")
    else:
        logger.error("Internal error")
        self.log_error(r, "Internal error in api while saving answer")
    return simplejson.dumps(response)
like image 524
Gevious Avatar asked Apr 26 '13 07:04

Gevious


People also ask

How do I fix max retries exceeded with url?

To solve the requests "ConnectionError: Max retries exceeded with url", use a Retry object and specify how many connection-related errors to retry on and set a backoff factor to apply between attempts.

What is Max retries?

The max-retries command specifies the maximum number of attempts to retransmit a failed message. This command is relevant only when the value set by the retry command is on . After you use the max-retries command, you can specify the interval between the attempts with the retry-interval command.

What requests exceptions ConnectionError?

Error Exception ConnectionError − This will be raised, if there is any connection error. For example, the network failed, DNS error so the Request library will raise ConnectionError exception. Response. raise_for_status() − Based on status code i.e. 401, 404 it will raise HTTPError for the url requested.


2 Answers

I've found that this error happens when some item in one of my views throws an exception. For example, when using the django 'requests' framework to post data to another URL:

r = requests.post(url, data=json.dumps(payload), headers=headers, timeout=5)

The downrange server was having connection issues, which threw an exception and that bubbled up and gave me the error you had above. I replaced with this:

try:
    r = requests.post(url, data=json.dumps(payload), headers=headers, timeout=5)
except requests.exceptions.ConnectionError as e:
    r = "No response"

And that fixed it (of course, I'd suggest adding in more error handling, but the above is the relevant subset).

like image 107
JayCrossler Avatar answered Sep 17 '22 15:09

JayCrossler


You must disable validation like this

requests.get('https://google.com', verify=False)

You should specify your CA.

like image 29
Haydar Dehghan Avatar answered Sep 19 '22 15:09

Haydar Dehghan