requests how headers python http-request python-requests

how - requests post python



Módulo Proxies con Python ''Solicitudes'' (5)

¡Aquí está mi clase básica en python para el módulo de solicitudes con algunas configuraciones de proxy y cronómetro!

import requests import time class BaseCheck(): def __init__(self, url): self.http_proxy = "http://user:pw@proxy:8080" self.https_proxy = "http://user:pw@proxy:8080" self.ftp_proxy = "http://user:pw@proxy: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()

Solo uno breve y simple sobre el excelente módulo de Requests para Python.

Parece que no puedo encontrar en la documentación qué debe contener la variable ''proxies''. Cuando le envío un dict con un valor "IP: PORT" estándar, lo rechazó pidiendo 2 valores. Entonces, supongo (porque esto no parece estar cubierto en los documentos) que el primer valor es el IP y el segundo el puerto?

Los documentos solo mencionan esto:

proxies - (opcional) Protocolo de mapeo del diccionario a la URL del proxy.

Así que probé esto ... ¿qué debería estar haciendo?

proxy = { ip: port}

¿Debería convertirlos a algún tipo antes de ponerlos en el dict?

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


Descubrí que urllib tiene un código realmente bueno para elegir la configuración de proxy del sistema y que están en la forma correcta para usarlo directamente. Puedes usar esto como:

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

Funciona muy bien y urllib también sabe cómo configurar Mac OS X y Windows.


La respuesta aceptada fue un buen comienzo para mí, pero seguí recibiendo el siguiente error:

AssertionError: Not supported proxy scheme None

La solución a esto era especificar http: // en la url del proxy de esta manera:

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 }

Me interesaría saber por qué el original funciona para algunas personas, pero no para mí.

Editar: veo que la respuesta principal ahora está actualizada para reflejar esto :)


La sintaxis dict de los proxies es {"protocol":"ip:port", ...} . Con él, puede especificar diferentes (o la misma) proxie (s) para las solicitudes que utilizan protocolos http , https y ftp :

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)

Deducido de la documentación de requests :

Parámetros:
method - método para el nuevo objeto Solicitud.
url : URL del nuevo objeto de solicitud.
...
proxies - (opcional) Protocolo de mapeo del diccionario a la URL del proxy .
...

En Linux, también puede hacerlo a través de las variables de entorno HTTP_PROXY , HTTPS_PROXY y FTP_PROXY :

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

En 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

Gracias, Jay por señalar esto:
La sintaxis cambió con las solicitudes 2.0.0 .
Deberá agregar un esquema a la url: http://docs.python-requests.org/en/latest/user/advanced/#proxies


Puede consultar la http://docs.python-requests.org/en/latest/user/advanced/#proxies del http://docs.python-requests.org/en/latest/user/advanced/#proxies .

Si necesita usar un proxy, puede configurar solicitudes individuales con el argumento de proxies para cualquier método de solicitud:

import requests proxies = { "http": "10.10.1.10:3128", "https": "10.10.1.10:1080", } requests.get("http://example.org", proxies=proxies)

Para usar HTTP Basic Auth con su proxy, use la sintaxis http://user:[email protected]/ :

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