Skip to content Skip to sidebar Skip to footer

Python Requests, How To Bind To Different Source Ip For Each Request?

I'm trying to learn some python, and i'm having issues with the logic in what I want to test. Currently my code is written in a way that binding to source_address doesn't change wh

Solution 1:

For each request, there is no elegant solution, but you'll need to use a requests Session object and mount a new transport adapter for each request.

You can find example code for the transport adapter in this issue comment, or you can use the adapter included in the requests-toolbelt package, like so

import requests
from requests_toolbelt.adapters import source

responses = []
s = requests.Session()
for source_ip, url in list_of_sources_and_urls:
    new_source = source.SourceAddressAdapter(source_ip)
    s.mount('http://', new_source)
    s.mount('https://', new_source)
    responses.append(s.get(url))

That assumes that list_of_sources_and_urls looks like

 [('127.0.0.1', 'https://google.com'),
  ('255.255.254.0', 'https://yahoo.com'),
  # ...
  ]

Post a Comment for "Python Requests, How To Bind To Different Source Ip For Each Request?"