Python Requests, wie man an jede Quelle IP für jede Anfrage zu binden?

Ich versuche, etwas Python zu lernen, und ich habe Probleme mit der Logik, was ich testen möchte. Derzeit ist mein Code so geschrieben, dass die Bindung an source_address sich nicht ändert, wenn der Prozess beginnt

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!" 

Ich schaue so etwas zu tun wo

 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 

One Solution collect form web for “Python Requests, wie man an jede Quelle IP für jede Anfrage zu binden?”

Für jede Anfrage gibt es keine elegante Lösung, aber Sie müssen ein Anforderungs-Session-Objekt verwenden und einen neuen Transportadapter für jede Anfrage einfügen.

Sie können Beispielcode für den Transportadapter in diesem Ausgabe-Kommentar finden , oder Sie können den Adapter verwenden, der in den requests-toolbelt Paket enthalten ist, wie 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)) 

Das geht davon aus, dass list_of_sources_and_urls aussieht

  [('127.0.0.1', 'https://google.com'), ('255.255.254.0', 'https://yahoo.com'), # ... ] 
  • Was gibt Pythons socket.recv () für nicht blockierende Sockel zurück, wenn keine Daten empfangen werden, bis ein Timeout auftritt?
  • Einrichten von Unix Socket mit Nginx und Django
  • Auf localhost, wie man eine freie Portnummer auswählt?
  • So senden Sie eine Liste über TCP-Sockets - Python
  • Python-Sockel recv von Java-Client
  • TCP-Client / Server mit Sockets, Server Senden von Dateien an Clients, Client hängt, Python
  • Anzeigeausgabe innerhalb von raw_input ()
  • Python select.select () unter Windows
  • Wie startet TLS auf einer aktiven Verbindung in Python?
  • Kommunikation Java (Client) mit Python (Server)
  • Mac App auf El Capitan mit Python Child Prozess
  • Python ist die beste Programmiersprache der Welt.