wake-up-neo.com

Proxies mit Python 'Requests' Modul

Nur ein kurzes, einfaches über das hervorragende Requests Modul für Python.

Ich kann anscheinend in der Dokumentation nicht finden, was die Variable 'Stellvertreter' enthalten sollte. Wenn ich ihm ein Diktat mit einem Standardwert "IP: PORT" sende, lehnte er es ab und forderte 2 Werte . Ich schätze (da dies in den Dokumenten nicht so zu sein scheint), dass der erste Wert der ist ip und der zweite der Port? 

Die Dokumente erwähnen dies nur:

proxies - (optional) Dictionary-Zuordnungsprotokoll zur URL des Proxys.

Also habe ich das versucht ... was soll ich tun? 

proxy = { ip: port}

und sollte ich diese in einen Typ konvertieren, bevor sie in das Diktat eingefügt werden? 

r = requests.get(url,headers=headers,proxies=proxy)
112
user1064306

Die proxies '-Dict-Syntax lautet {"protocol":"ip:port", ...}. Damit können Sie verschiedene (oder dieselben) Proxies für Anforderungen angeben, die die Protokolle http, https und ftp verwenden:

http_proxy  = "http://10.10.1.10:3128"
https_proxy = "https://10.10.1.11:1080"
ftp_proxy   = "ftp://10.10.1.10:3128"

proxyDict = { 
              "http"  : http_proxy, 
              "https" : https_proxy, 
              "ftp"   : ftp_proxy
            }

r = requests.get(url, headers=headers, proxies=proxyDict)

Abgeleitet von der requests-Dokumentation :

Parameter:
method - Methode für das neue Request-Objekt.
url - URL für das neue Request-Objekt.
...
proxies - (optional) Dictionary Zuordnungprotocol zur URL des Proxys.
... 


Unter Linux können Sie dies auch über die Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und FTP_PROXY tun:

export HTTP_PROXY=10.10.1.10:3128
export HTTPS_PROXY=10.10.1.11:1080
export FTP_PROXY=10.10.1.10:3128

Unter Windows:

set http_proxy=10.10.1.10:3128
set https_proxy=10.10.1.11:1080
set ftp_proxy=10.10.1.10:3128

Danke, Jay, dass du darauf hingewiesen hast:
Die Syntax wurde mit request 2.0.0 geändert.
Sie müssen der URL ein Schema hinzufügen: http://docs.python-requests.org/de/latest/user/advanced/#proxies

206
chown

Ich habe herausgefunden, dass urllib wirklich guten Code hat, um die Proxy-Einstellungen des Systems zu übernehmen, und sie sind in der richtigen Form, um sie direkt zu verwenden. Sie können dies wie folgt verwenden:

import urllib

...
r = requests.get('http://example.org', proxies=urllib.getproxies())

Es funktioniert wirklich gut und urllib weiß auch, wie man Mac OS X- und Windows-Einstellungen erhält.

22
Ben Golding

Die Dokumentation zu proxy finden Sie hier .

Wenn Sie einen Proxy verwenden müssen, können Sie einzelne Anforderungen mit dem Argument proxies für jede Anforderungsmethode konfigurieren:

import requests

proxies = {
  "http": "10.10.1.10:3128",
  "https": "10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

Um HTTP Basic Auth mit Ihrem Proxy zu verwenden, verwenden Sie die http: // Benutzer: [email protected]/ -Syntax:

proxies = {
    "http": "http://user:[email protected]:3128/"
}
18
Zhifeng Hu

Die akzeptierte Antwort war ein guter Anfang für mich, aber ich habe immer folgenden Fehler erhalten:

AssertionError: Not supported proxy scheme None

Fix dazu: http: // in der Proxy-URL angeben, also: 

http_proxy  = "http://194.62.145.248:8080"
https_proxy  = "https://194.62.145.248:8080"
ftp_proxy   = "10.10.1.10:3128"

proxyDict = {
              "http"  : http_proxy,
              "https" : https_proxy,
              "ftp"   : ftp_proxy
            }

Mich würde interessieren, warum das Original für manche Menschen funktioniert, aber nicht für mich. 

Edit: Ich sehe, dass die Hauptantwort jetzt aktualisiert wurde, um dies zu reflektieren :) 

16
Owen B

hier ist meine grundlegende Klasse in Python für das Anforderungsmodul mit einigen Proxy-Konfigurationen und Stoppuhr!

import requests
import time
class BaseCheck():
    def __init__(self, url):
        self.http_proxy  = "http://user:[email protected]:8080"
        self.https_proxy = "http://user:[email protected]:8080"
        self.ftp_proxy   = "http://user:[email protected]:8080"
        self.proxyDict = {
                      "http"  : self.http_proxy,
                      "https" : self.https_proxy,
                      "ftp"   : self.ftp_proxy
                    }
        self.url = url
        def makearr(tsteps):
            global stemps
            global steps
            stemps = {}
            for step in tsteps:
                stemps[step] = { 'start': 0, 'end': 0 }
            steps = tsteps
        makearr(['init','check'])
        def starttime(typ = ""):
            for stemp in stemps:
                if typ == "":
                    stemps[stemp]['start'] = time.time()
                else:
                    stemps[stemp][typ] = time.time()
        starttime()
    def __str__(self):
        return str(self.url)
    def getrequests(self):
        g=requests.get(self.url,proxies=self.proxyDict)
        print g.status_code
        print g.content
        print self.url
        stemps['init']['end'] = time.time()
        #print stemps['init']['end'] - stemps['init']['start']
        x= stemps['init']['end'] - stemps['init']['start']
        print x


test=BaseCheck(url='http://google.com')
test.getrequests()
1
mtt2p

Wenn Sie Cookies und Sitzungsdaten persistieren möchten, tun Sie dies am besten so:

import requests

proxies = {
    'http': 'http://user:[email protected]:3128',
    'https': 'https://user:[email protected]:3128',
}

# Create the session and set the proxies.
s = requests.Session()
s.proxies = proxies

# Make the HTTP request through the session.
r = s.get('http://www.showmemyip.com/')
1
User

Es ist etwas spät, aber hier ist eine Wrapper-Klasse, die das Scraping von Proxys vereinfacht und dann ein http POST oder GET erstellt

ProxyRequests

https://github.com/rootVIII/proxy_requests
0
user10171509

ich habe gerade einen Proxy-Graber erstellt und kann mich auch ohne Eingabe mit demselben Proxy-Proxy verbinden. Hier ist:

#Import Modules

from termcolor import colored
from Selenium import webdriver
import requests
import os
import sys
import time

#Proxy Grab

options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.sslproxies.org/")
tbody = driver.find_element_by_tag_name("tbody")
cell = tbody.find_elements_by_tag_name("tr")
for column in cell:

        column = column.text.split(" ")
        print(colored(column[0]+":"+column[1],'yellow'))
driver.quit()
print("")

os.system('clear')
os.system('cls')

#Proxy Connection

print(colored('Getting Proxies from graber...','green'))
time.sleep(2)
os.system('clear')
os.system('cls')
proxy = {"http": "http://"+ column[0]+":"+column[1]}
url = 'https://mobile.facebook.com/login'
r = requests.get(url,  proxies=proxy)
print("")
print(colored('Connecting using proxy' ,'green'))
print("")
sts = r.status_code
0
Rae mh