Запросы Python, как связать с различным исходным ip для каждого запроса?

Я пытаюсь изучить некоторый python, и у меня возникают проблемы с логикой в ​​том, что я хочу проверить. В настоящее время мой код написан таким образом, что привязка к source_address не изменяется при запуске процесса

import socket import requests real_create_conn = socket.create_connection def set_src_addr(*args): address, timeout = args[0], args[1] source_address = ('201.XX1', 0) return real_create_conn(address, timeout, source_address) socket.create_connection = set_src_addr r = requests.get('http://www.mywebpage.com/main') print r.status_code if r.status_code == 404 print "Webpage Down!" r = requests.get('http://www.mywebpage.com/blog') print r.status_code if r.status_code == 204 print "Error occured!" 

Я хочу сделать что-то вроде этого, где

 import socket import requests While 1: #bind to source address 201.XX1 #Send request to main webpage #print result time.sleep(300) # 5 minutes #bind to source address 201.XX12 #Send request to blog webpage #print result time.sleep(300) # 5 minutes 

Для каждого запроса нет элегантного решения, но вам нужно будет использовать объект Session запросов и смонтировать новый транспортный адаптер для каждого запроса.

Вы можете найти пример кода для транспортного адаптера в этом выпуске , или вы можете использовать адаптер, включенный в пакет requests-toolbelt , например

 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)) 

Это предполагает, что list_of_sources_and_urls выглядит так:

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