Πώς να ορίσετε ένα επικυρωμένο μεσολάβησης για σύνδεση python http;

ψήφοι
46

Ποιος είναι ο καλύτερος τρόπος για να καθορίσετε ένα πληρεξούσιο με το όνομα χρήστη και τον κωδικό πρόσβασης για μια σύνδεση http σε πύθωνα;

Δημοσιεύθηκε 29/08/2008 στις 05:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
57

Αυτό λειτουργεί για μένα:

import urllib2

proxy = urllib2.ProxyHandler({'http': 'http://
username:password@proxyurl:proxyport'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)

conn = urllib2.urlopen('http://python.org')
return_str = conn.read()
Απαντήθηκε 29/08/2008 στις 06:30
πηγή χρήστη

ψήφοι
9

Ο καλύτερος τρόπος για να περάσει από μια μεσολάβησης που απαιτεί έλεγχο ταυτότητας χρησιμοποιεί urllib2 να χτίσει ένα ανοιχτήρι προσαρμοσμένη διεύθυνση URL, στη συνέχεια, χρησιμοποιώντας ότι για να προβεί σε όλες τις αιτήσεις που θέλετε να πάτε μέσω της μεσολάβησης. Σημείωση ιδίως, τότε μάλλον δεν θέλετε να ενσωματώσετε τον κωδικό πρόσβασης του διακομιστή μεσολάβησης στο url ή τον πηγαίο κώδικα python (εκτός αν είναι απλά ένα γρήγορο hack).

import urllib2

def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, proxyurl, proxyuser, proxypass)

    proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)

    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 4:
        url_opener = get_proxy_opener(*sys.argv[1:4])
        for url in sys.argv[4:]:
            print url_opener.open(url).headers
    else:
        print "Usage:", sys.argv[0], "proxy user pass fetchurls..."

Σε ένα πιο σύνθετο πρόγραμμα, μπορείτε να χωρίζουν αυτά τα στοιχεία ως κατάλληλα (για παράδειγμα, μόνο με τη Διαχείριση έναν κωδικό πρόσβασης για τη διάρκεια ζωής της εφαρμογής). Η τεκμηρίωση python έχει περισσότερα παραδείγματα για το πώς να κάνουν περίπλοκα πράγματα με urllib2 που μπορεί να σας φανούν χρήσιμες.

Απαντήθηκε 29/08/2008 στις 21:52
πηγή χρήστη

ψήφοι
3

Ή, αν θέλετε να το εγκαταστήσετε, έτσι ώστε να χρησιμοποιείται πάντα με urllib2.urlopen (έτσι ώστε να μην χρειάζεται να κρατήσει μια αναφορά στο ανοιχτήρι περίπου):

import urllib2
url = 'www.proxyurl.com'
username = 'user'
password = 'pass'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# None, with the "WithDefaultRealm" password manager means
# that the user/pass will be used for any realm (where
# there isn't a more specific match).
password_mgr.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
print urllib2.urlopen("http://www.example.com/folder/page.html").read()
Απαντήθηκε 26/09/2008 στις 21:17
πηγή χρήστη

ψήφοι
15

Ρύθμιση var περιβάλλον που ονομάζεται http_proxy όπως αυτό: http: // username: password @ proxy_url: λιμάνι

Απαντήθηκε 15/10/2010 στις 13:06
πηγή χρήστη

ψήφοι
1

Εδώ είναι η χρήση μεθόδου urllib

import urllib.request

# set up authentication info
authinfo = urllib.request.HTTPBasicAuthHandler()
proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})

# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
                                     urllib.request.CacheFTPHandler)

# install it
urllib.request.install_opener(opener)

f = urllib.request.urlopen('http://www.python.org/')
"""
Απαντήθηκε 25/03/2016 στις 06:37
πηγή χρήστη

ψήφοι
3

Χρησιμοποίησε αυτό:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)

Νομίζω ότι είναι πολύ πιο απλή από τη χρήση urllib. Δεν καταλαβαίνω γιατί οι άνθρωποι αγαπούν χρησιμοποιούν urllibτόσο πολύ.

Απαντήθηκε 29/01/2017 στις 09:19
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more