कुछ उदाहरण, कुछ चीनी वाक्य रचना के साथ, उस चीज़ के लिए यूरलिब का उपयोग कैसे करें। मैं अनुरोधों और अन्य पुस्तकालयों के बारे में जानता हूं, लेकिन यूरलिथ अजगर के लिए मानक रूप से उपयुक्त है और इसके लिए अलग से कुछ भी स्थापित करने की आवश्यकता नहीं है।
अजगर 2/3 संगत।
import sys
if sys.version_info.major == 3:
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, Request, build_opener
from urllib.parse import urlencode
else:
from urllib2 import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, Request, build_opener
from urllib import urlencode
def curl(url, params=None, auth=None, req_type="GET", data=None, headers=None):
post_req = ["POST", "PUT"]
get_req = ["GET", "DELETE"]
if params is not None:
url += "?" + urlencode(params)
if req_type not in post_req + get_req:
raise IOError("Wrong request type \"%s\" passed" % req_type)
_headers = {}
handler_chain = []
if auth is not None:
manager = HTTPPasswordMgrWithDefaultRealm()
manager.add_password(None, url, auth["user"], auth["pass"])
handler_chain.append(HTTPBasicAuthHandler(manager))
if req_type in post_req and data is not None:
_headers["Content-Length"] = len(data)
if headers is not None:
_headers.update(headers)
director = build_opener(*handler_chain)
if req_type in post_req:
if sys.version_info.major == 3:
_data = bytes(data, encoding='utf8')
else:
_data = bytes(data)
req = Request(url, headers=_headers, data=_data)
else:
req = Request(url, headers=_headers)
req.get_method = lambda: req_type
result = director.open(req)
return {
"httpcode": result.code,
"headers": result.info(),
"content": result.read()
}
"""
Usage example:
"""
Post data:
curl("http://127.0.0.1/", req_type="POST", data='cascac')
Pass arguments (http://127.0.0.1/?q=show):
curl("http://127.0.0.1/", params={'q': 'show'}, req_type="POST", data='cascac')
HTTP Authorization:
curl("http://127.0.0.1/secure_data.txt", auth={"user": "username", "pass": "password"})
फ़ंक्शन पूर्ण नहीं है और संभवतः आदर्श नहीं है, लेकिन उपयोग करने के लिए एक मूल प्रतिनिधित्व और अवधारणा दिखाता है। अतिरिक्त चीजों को स्वाद के साथ जोड़ा या बदला जा सकता है।
12/08 अपडेट
यहाँ अद्यतन स्रोत को जीने के लिए एक GitHub लिंक दिया गया है। वर्तमान में समर्थन कर रहे हैं: