简体   繁体   中英

Set max retries on requests.post

I want to set a max retry limit on my script to eliminate these errors:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='173.180.119.132', port=8080): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x03F9E2E0>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))

I can't find a way to send a post request with max retries.

This is my code:

import requests
from requests.adapters import HTTPAdapter
requests.adapters.DEFAULT_RETRIES = 2
f = open("hosts.txt", "r")

payload = {
    'inUserName': 'ADMIN',
    'inUserPassword': '1234'
}
i = 0
for line in f:
    i += 1
    print(i)
    r = requests.post("http://" + line, data=payload)
    if "401 - Unauthorized" in r:
        pass
    else:
        if r.status_code != 200:
            pass
        else:
            with open("output.txt", "a+") as output_file:
                output_file.write(line)

This error

requests.exceptions.ConnectionError: HTTPConnectionPool(host='173.180.119.132', port=8080): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x03F9E2E0>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))

is caused by sending too many requests to the server and the only way to detect is by a response from the server-side, ie there is no way of knowing when this error will be thrown on client-side.

There are a few ways in which you can get around this error.

You can catch the error and you can break out of the loop.

try:
    page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
    #r.status_code = "Connection refused"
    break

You can also simply add a sleep(unit) line in your code to add a gap between each request made to the server. This often overcomes the maxRetry error.

from time import sleep
sleep(5) # 5 seconds sleep cmd

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM