पायथन 'अनुरोध' मॉड्यूल के साथ प्रॉक्सी


159

उत्कृष्ट अनुरोधों के बारे में बस एक छोटा, सरलपायथन के लिए मॉड्यूल के ।

मुझे लगता है कि दस्तावेज़ में वैरिएबल 'प्रॉक्सिस' नहीं होना चाहिए। जब मैं इसे एक मानक "आईपी: पोर्ट" मूल्य के साथ एक तानाशाही भेजता हूं, तो उसने इसे 2 मानों के लिए पूछते हुए खारिज कर दिया। तो, मुझे लगता है (क्योंकि यह डॉक्स में शामिल नहीं किया गया है) लगता है कि पहला मूल्य आईपी और दूसरा पोर्ट है?

डॉक्स केवल इसका उल्लेख करते हैं:

प्रॉक्सी - (वैकल्पिक) शब्दकोश मैपिंग प्रोटोकॉल प्रॉक्सी के URL पर।

तो मैंने यह कोशिश की ... मुझे क्या करना चाहिए?

proxy = { ip: port}

और क्या मुझे इन्हें हुकुम में रखने से पहले किसी प्रकार में बदलना चाहिए?

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

जवाबों:


280

proxies'Dict वाक्य रचना है {"protocol":"ip:port", ...}। इसके साथ आप http , https , और 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)

से निष्कर्ष निकाला requestsप्रलेखन :

पैरामीटर:
method - नए अनुरोध ऑब्जेक्ट के लिए विधि।
url- नए अनुरोध ऑब्जेक्ट के लिए URL।
...
proxies(वैकल्पिक) शब्दकोश प्रॉक्सी के URL के लिए शब्दकोश मानचित्रण प्रोटोकॉल । ...


लिनक्स पर आप भी के माध्यम से ऐसा कर सकते हैं HTTP_PROXY, HTTPS_PROXYऔर 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

विंडोज पर:

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

धन्यवाद, जे इसे इंगित करने के लिए:
वाक्यविन्यास 2.0.0 अनुरोधों के साथ बदल गया ।
आपको url में एक स्कीमा जोड़ने की आवश्यकता होगी: https://2.python-requests.org/en/latest/user/advanced/#proxies


@cigar मुझे पता था क्योंकि urllib2 अपने प्रॉक्सी के लिए सटीक समान प्रारूप का उपयोग करता है, और जब मैंने docs.python-requests.org/en/latest/api/#module-requests देखा, तो वे कहते हैं - प्रॉक्सी (- (वैकल्पिक) शब्दकोश मानचित्रण प्रोटोकॉल प्रॉक्सी का URL। ", मुझे तुरंत पता था।
chown

1
आह्ह मैं देख रहा हूँ, यहाँ से छुटकारा पाने की सलाह के कारण कभी भी urllib2 के साथ परदे के पीछे का उपयोग नहीं किया गया, कोड के 2 पृष्ठों को 8 पंक्तियों के साथ प्रतिस्थापित किया: / re: कंधे :))) यहाँ बहुत अच्छा है, आपने मुझे पहले ही घंटों में बचा लिया है संपूर्ण! अगर आपको कभी भी संगीत के साथ किसी चिल्लाहट की मदद की ज़रूरत है, तो मैं सलाह दे सकता हूं, अन्यथा बड़े पैमाने पर धन्यवाद या चाय के कप के अलावा अन्य चुकाने का तरीका नहीं सोच सकता!

ऐसा लगता है कि अनुरोध और इसके अलावा urllib3 एक प्रॉक्सी का उपयोग करते समय एक कनेक्शन नहीं कर सकता है :(
dzen

@dzen मैंने अभी तक उपयोग नहीं किया है urllib3इसलिए मुझे उस पर गौर करना होगा। सर उठाने के लिए धन्यवाद।
chown

3
@chown सिनेमैक्स 2.0.0 अनुरोधों के साथ बदल गया। आपको url में एक स्कीमा जोड़ना होगा: docs.python-requests.org/en/latest/user/advanced/#proxies यह अच्छा होगा यदि आप इसे अपने उत्तर में यहाँ जोड़ सकते हैं
Jay

28

मैंने पाया है कि सिस्टम की प्रॉक्सी सेटिंग्स को लेने के लिए urllib के पास कुछ बहुत अच्छा कोड है और वे सीधे उपयोग करने के लिए सही रूप में होते हैं। आप इसका उपयोग कर सकते हैं जैसे:

import urllib

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

यह वास्तव में अच्छी तरह से काम करता है और urllib मैक ओएस एक्स और विंडोज सेटिंग्स के बारे में भी जानता है।


क्या यह प्रॉक्सी के बिना काम करता है? हमारे कुछ उपयोगकर्ताओं के पास कोई प्रॉक्सी नहीं है और कुछ के पास नहीं है।
जॉन्सल

1
क्या इसमें no_proxy शामिल है और अनुरोध no_proxy का सम्मान करता है? कोई बात नहीं, ऐसा लगता है कि समाधान हैं: github.com/kennethreitz/requests/issues/879
jrwren

4
ग़लती हो रही है:module 'urllib' has no attribute 'getproxies'
ज़हरा

4
ग्रीनिश: urllib.request.getproxies ()
oliche

1
@ ज़हरा ने urllib2.getproxies ()
rleelr

25

आप यहाँ प्रॉक्सी प्रलेखन का उल्लेख कर सकते हैं ।

यदि आपको एक प्रॉक्सी का उपयोग करने की आवश्यकता है, तो आप किसी भी अनुरोध विधि से प्रॉक्सी के तर्क के साथ व्यक्तिगत अनुरोधों को कॉन्फ़िगर कर सकते हैं:

import requests

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

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

अपने प्रॉक्सी के साथ HTTP बेसिक ऑथेंट का उपयोग करने के लिए, http: // उपयोगकर्ता: password@host.com/ सिंटैक्स का उपयोग करें:

proxies = {
    "http": "http://user:pass@10.10.1.10:3128/"
}

17

स्वीकृत उत्तर मेरे लिए एक अच्छी शुरुआत थी, लेकिन मुझे निम्नलिखित त्रुटि मिलती रही:

AssertionError: Not supported proxy scheme None

इस तरह तय करना प्रॉक्सी यूआरएल में http: // को निर्दिष्ट करना था:

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
            }

मुझे दिलचस्पी होगी कि क्यों कुछ लोगों के लिए मूल काम करता है लेकिन मुझे नहीं।

संपादित करें: मुझे लगता है कि मुख्य उत्तर अब यह प्रतिबिंबित करने के लिए अपडेट किया गया है :)


4
2.0.0 के साथ परिवर्तित: प्रॉक्सी URL में अब एक स्पष्ट योजना होनी चाहिए। यदि वे नहीं करते हैं तो एक MissingSchema अपवाद उठाया जाएगा।
जय

4

यदि आप कुकीज़ और सत्र डेटा को जारी रखना चाहते हैं, तो आप इसे इस तरह से पूरा करेंगे:

import requests

proxies = {
    'http': 'http://user:pass@10.10.1.0:3128',
    'https': 'https://user:pass@10.10.1.0: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/')

2

8 साल देर से। लेकिन मुझे पसंद है:

import os
import requests

os.environ['HTTP_PROXY'] = os.environ['http_proxy'] = 'http://http-connect-proxy:3128/'
os.environ['HTTPS_PROXY'] = os.environ['https_proxy'] = 'http://http-connect-proxy:3128/'
os.environ['NO_PROXY'] = os.environ['no_proxy'] = '127.0.0.1,localhost,.local'

r = requests.get('https://example.com')  # , verify=False

1

यहाँ कुछ बुनियादी विन्यास और स्टॉपवॉच के साथ अनुरोध मॉड्यूल के लिए अजगर में मेरा मूल वर्ग है!

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

1

मैंने सिर्फ एक प्रॉक्सी ग्रेडर बनाया है और यहां बिना किसी इनपुट के भी उसी तरह से पकड़े गए प्रॉक्सी से जुड़ सकते हैं:

#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

यह थोड़ा देर से है, लेकिन यहां एक आवरण वर्ग है जो स्क्रैपिंग परदे के पीछे को सरल करता है और फिर http POST या GET बनाता है:

ProxyRequests

https://github.com/rootVIII/proxy_requests

0

मैं कुछ कोड साझा करता हूं कि साइट "https://free-proxy-list.net" से प्रॉक्सी कैसे लाएं और "एलीट प्रॉक्सी प्रॉक्सीर" (प्रारूप आईपी: पोर्ट) जैसे टूल के साथ संगत फ़ाइल में डेटा संग्रहीत करें:

## PROXY_UPDATER - https://free-proxy-list.net/ से मुफ्त प्रॉक्सी प्राप्त करें

from lxml.html import fromstring
import requests
from itertools import cycle
import traceback
import re

######################FIND PROXIES#########################################
def get_proxies():
    url = 'https://free-proxy-list.net/'
    response = requests.get(url)
    parser = fromstring(response.text)
    proxies = set()
    for i in parser.xpath('//tbody/tr')[:299]:   #299 proxies max
        proxy = ":".join([i.xpath('.//td[1]/text()') 
        [0],i.xpath('.//td[2]/text()')[0]])
        proxies.add(proxy)
    return proxies



######################write to file in format   IP:PORT######################
try:
    proxies = get_proxies()
    f=open('proxy_list.txt','w')
    for proxy in proxies:
        f.write(proxy+'\n')
    f.close()
    print ("DONE")
except:
    print ("MAJOR ERROR")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.