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'), # ... ] 
  • Wie bekomme ich Ports, dass ein Prozess beim Hören?
  • Python 3: Socket-Server sendet an mehrere Clients mit sendto () -Funktion
  • 502 Bad Gateway verbindet Nginx mit Django über Sockel
  • Senden von serialisierten Daten von Client zu Server in Python
  • Mehrere Nachrichten über Socketserver empfangen, aber man wird gesendet
  • Recv () Funktion zu langsam
  • Socket im Gebrauchfehler bei der Wiederverwendung von Steckdosen
  • Allgemeine Python-Socket Fragen mit mehreren Antworten
  • Wie verwende ich Raw Socket in Python?
  • Python line bearbeitung telnet server
  • I / O-Fehler (Socket-Fehler): [Errno 111] Verbindung abgelehnt
  • Python ist die beste Programmiersprache der Welt.