পাইথন 'রিকোয়েস্টস' মডিউল সহ প্রক্সিগুলি


159

পাইথনের জন্য দুর্দান্ত অনুরোধগুলির মডিউল সম্পর্কে কেবল একটি সংক্ষিপ্ত, সাধারণ একটি ।

ভেরিয়েবল 'প্রক্সি'গুলিতে কী থাকতে হবে তা আমি ডকুমেন্টেশনে সন্ধান করতে পারি না। আমি যখন এটি একটি স্ট্যান্ডার্ড "আইপি: পোর্ট" মান সহ ডিক্স প্রেরণ করি তখন এটি 2 টি মান জিজ্ঞাসা করে এটি প্রত্যাখ্যান করে। সুতরাং, আমি অনুমান করি (কারণ এটি ডক্সে আচ্ছাদিত বলে মনে হয় না) যে প্রথম মানটি আইপি এবং দ্বিতীয়টি বন্দর?

দস্তাবেজগুলি কেবল এটি উল্লেখ করে:

প্রক্সি - (alচ্ছিক) প্রক্সিটির URL এ ম্যাপিং প্রোটোকল।

সুতরাং আমি এটি চেষ্টা করেছিলাম ... আমার কী করা উচিত?

proxy = { ip: port}

এবং ডিকটিতে রাখার আগে আমি কি এগুলিকে কিছু ধরণের রূপান্তর করব?

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

উত্তর:


279

proxies'অভি সিনট্যাক্স হয় {"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- নতুন অনুরোধ অবজেক্টের জন্য ইউআরএল।
...
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 এর
সাথে সিনট্যাক্সটি পরিবর্তিত হয়েছে । আপনাকে ইউআরএলে একটি স্কিমা যুক্ত করতে হবে: https://2.python-requosts.org/en/latest/user/advanced/#proxies


@ সিগার আমি জানতাম কারণ urllib2 তাদের প্রক্সি ডিকের জন্য হুবহু একই বিন্যাসটি ব্যবহার করে এবং যখন আমি ডকস.পিথন-রিকুয়েস্ট.আর.ইন / স্লেস্ট / এপি /# মডুল-রচনাগুলি দেখেছি "প্রক্সি - ( alচ্ছিক ) অভিধান ম্যাপিং প্রোটোকলটি প্রক্সিটির ইউআরএল। ", আমি এখনই জানতাম।
chown

1
আহ, আমি দেখতে পেয়েছি, এখান থেকে প্রাপ্ত হওয়া থেকে মুক্তি পাওয়ার পরামর্শের কারণে কখনও urllib2 এর সাথে প্রক্সি ব্যবহার করা হয়নি, 2 পৃষ্ঠার কোডটি 8 টি লাইন দিয়ে প্রতিস্থাপন করা হয়েছে: / পুনরায়: কাঁধ :))) এখানে দুর্দান্ত থাকুন, আপনি ইতিমধ্যে আমাকে ঘন্টা বাঁচিয়েছেন মোট! আপনার যদি কখনও সংগীতের সাথে গিমে চিৎকার করার জন্য কোনও সাহায্যের প্রয়োজন হয়, যা আমি পরামর্শ দিতে পারি, অন্যথায় প্রচুর ধন্যবাদ বা চায়ের কাপ ব্যতীত অন্য কোনও শোধ করার উপায় ভাবতে পারি না!

যখন একটি প্রক্সি :( ব্যবহার অনুরোধ এবং পরন্তু urllib3 একটি CONNECT ব্যবহার করতে পারবেন না বলে মনে হয়
dzen

@ Dzen আমি এখনও ব্যবহার urllib3করি নি তাই আমাকে এটি দেখতে হবে। সতর্ক থাকুন জন্য ধন্যবাদ।
chown

3
অনুরোধগুলি 2.0.0 এর সাথে সিনট্যাক্সটি পরিবর্তিত হয়েছে আপনাকে ইউআরএলটিতে একটি স্কিমা যোগ করতে হবে: ডকস.পিথন- পুনর্বিজ্ঞাপন.আর / স্লেস্ট / ইউজার / অ্যাডভান্সড / # প্রক্সিজ আপনার উত্তরটি এখানে যুক্ত করতে পারলে ভাল লাগবে
জয়

28

আমি খুঁজে পেয়েছি যে সিস্টেমের প্রক্সি সেটিংস বাছাই করার জন্য urllib এর কিছু সত্যই ভাল কোড রয়েছে এবং এগুলি সরাসরি ব্যবহারের জন্য সঠিক ফর্ম হতে পারে। আপনি এটি ব্যবহার করতে পারেন:

import urllib

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

এটি সত্যই ভাল কাজ করে এবং ইউরেলিব ম্যাক ওএস এক্স এবং উইন্ডোজ সেটিংস পাওয়ার বিষয়েও জানে।


এটি কোন প্রক্সি ছাড়া কাজ করে? আমাদের কিছু ব্যবহারকারীর কোনও প্রক্সি নেই এবং কিছু রয়েছে।
জোনাসল

1
এটিতে নো_প্রক্সি অন্তর্ভুক্ত রয়েছে এবং অনুরোধগুলি নো_প্রক্সিকে সম্মান করে? কোনও বিষয় নয়, মনে হয় এর সমাধান রয়েছে: github.com/kennethreitz/requests/issues/879
জুন

4
ভুল হচ্ছে:module 'urllib' has no attribute 'getproxies'
জহরা

4
সবুজ: urllib.request.getproxies ()
ইলিক

1
@ জাহরা urllib2.getproxies () চেষ্টা করুন
রোলার

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
২.০.০ সহ পরিবর্তিত হয়েছে: প্রক্সি ইউআরএলগুলির অবশ্যই একটি স্পষ্ট স্কিম থাকা উচিত। মিসিংস্কিমার ব্যতিক্রম উত্থাপিত হবে যদি তারা তা না করে।
জে

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

এটি কিছুটা দেরি হয়ে গেছে তবে এখানে একটি মোড়কের ক্লাস রয়েছে যা স্ক্র্যাপিং প্রক্সিগুলি সহজ করে এবং তারপরে একটি পোস্ট পোস্ট বা জিইটি:

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")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.