How I can change IP with each POST request?

Viewed 114

How I can change the IP for each POST request? It's not working for me now. Perhaps there is another approach? Is it possible to open a persistent connection to proxy and then close it?

next_delay = 0.0
flag = 0

proxy1 = 'ip:port'
proxy2 = 'ip:port'
proxy3 = 'ip:port'
proxy4 = 'ip:port'

async def fetch_all_tasks(session): 
    print('Start')
    print(time.time())
    responses = await asyncio.gather(*tasks(session))
    print('End')
    print(time.time())
    for response in responses:
           results.append(await response.text())

def tasks(session):
    task = []
    for i in range(0, requestsNumber):
        task.append(asyncio.create_task(request(session)))
    return task

async def fetch_main(headers):
    async with aiohttp.ClientSession(headers=headers) as session:
            await fetch_all_tasks(session)

async def request(session):
    global next_delay
    global flag
    next_delay += delay
    await asyncio.sleep(next_delay)
    if flag == 0:
        flag = 1
        return await session.post(url, proxy=proxy1, data = json.dumps(js), ssl=False)
    elif flag == 1:
        flag = 2
        return await session.post(url, proxy=proxy2, data = json.dumps(js), ssl=False)
    elif flag == 2:
        flag = 3
        return await session.post(url, proxy=proxy3, data = json.dumps(js), ssl=False)
    elif flag == 3:
        flag = 4
        return await session.post(url, proxy=proxy4, data = json.dumps(js), ssl=False)
    elif flag == 4:
        flag = 0
        return await session.post(url, proxy=proxy4, data = json.dumps(js), ssl=False)

    
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch_main(headers))
1 Answers

You could make use of itertools.cycle, fetching the next proxy using next():

import itertools

proxy1 = 'ip1:port'
proxy2 = 'ip2:port'
proxy3 = 'ip3:port'
proxy4 = 'ip4:port'

proxies = itertools.cycle([proxy1, proxy2, proxy3, proxy4])

for x in range(10):
    currentProxy = next(proxies)  # fetches the next proxy!
    print(currentProxy)

Out:

ip1:port
ip2:port
ip3:port
ip4:port
ip1:port
ip2:port
ip3:port
ip4:port
ip1:port
ip2:port
Related