كيفية تحديد مصادقة الوكيل على الثعبان http الاتصال ؟
سؤال
ما هي أفضل طريقة لتحديد الوكيل مع اسم المستخدم وكلمة المرور على اتصال http في الثعبان ؟
المحلول
استخدام هذا:
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
كثيرا.
نصائح أخرى
يعمل هذا بالنسبة لي:
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()
إعداد بيئة فار اسمه http_ proxy مثل هذا: http://username:password@proxy_url:port
أفضل طريقة للذهاب من خلال وكيل يتطلب مصادقة باستخدام urllib2 لبناء عنوان url مخصص فتاحة, ثم استخدام هذا لجعل جميع الطلبات تريد أن تذهب من خلال الوكيل.ملاحظة على وجه الخصوص ، ربما كنت لا ترغب في تضمين الوكيل كلمة في عنوان url أو الثعبان رمز المصدر (إلا إذا كان مجرد الإختراق السريع).
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..."
في عالم أكثر تعقيدا البرنامج ، يمكنك فصل هذه المكونات على النحو المناسب (على سبيل المثال فقط باستخدام كلمة مرور واحدة مدير لعمر التطبيق).الثعبان الوثائق المزيد من الأمثلة حول كيفية القيام الأشياء المعقدة مع urllib2 أيضا أنك قد تجد من المفيد.
أو إذا كنت ترغب في تثبيته ، بحيث أنه يستخدم دائما مع 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()
هنا هو طريقة استخدام 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/')
"""