рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдкрд╛рдпрдерди 2.X рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХрд╛рд░реНрдп: рдмреЗрд╕рд┐рдХ рдФрд░ NTLM рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдпрдерди рдХрд╛рд░реНрдп рдореЗрдВ
xmlrpclib рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдПрдХ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдХреБрдХреАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрдЧреНрд░реЗрдкреЛрд░реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд╣рд╛рдВ
рдЯреАрдЖрд░рдПрд╕реА рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп, рд╡рд┐рд╡рд░рдг, рд▓реЙрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд┐рдХрдЯ, рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред TRAC рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ xmlRPC (
XmlRpcPlugin рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдХреЗ ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рднреАрддрд░ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдкреАрдЫреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣
urllib рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рд╡рд╣рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ XML рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
рдкрд╣рд▓реЗ urllib рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЗрд╕реЗ
urllib2 рдХреЗ рддрд╣рдд рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рдерд╛, рдЬрд╣рд╛рдВ рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд╡рд┐рдХрд▓реНрдк рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рднреА рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдПрдХ рд╕реАрдзрд╛ рдХрдиреЗрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рд╕реАрдзреЗ рд╣реЛрдЧрд╛ - рдпрд╣ urllib2 рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ)ред
NTLM рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдЕрдЬрдЧрд░- ntlm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
Copy Source | Copy HTML serverURL = "http://some.server.com/xmlrpc" xmlTransport= UrllibTransport() server = xmlrpclib .ServerProxy(serverURL, transport = xmlTransport)
Copy Source | Copy HTML serverURL = "http://some.server.com/xmlrpc" xmlTransport= UrllibTransport() server = xmlrpclib .ServerProxy(serverURL, transport = xmlTransport)
Copy Source | Copy HTML serverURL = "http://some.server.com/xmlrpc" xmlTransport= UrllibTransport() server = xmlrpclib .ServerProxy(serverURL, transport = xmlTransport)
Copy Source | Copy HTML serverURL = "http://some.server.com/xmlrpc" xmlTransport= UrllibTransport() server = xmlrpclib .ServerProxy(serverURL, transport = xmlTransport)
рдкрд░рд┐рд╡рд╣рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА:
Copy Source | Copy HTML
- # - * - рдХреЛрдбрд┐рдВрдЧ: utf8 - * -
- # рдЕрдЬрдЧрд░- ntlm (http://code.google.com/p/python-ntlm/) рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- ntlm рд╕реЗ HTTPNtlmAuthHandler рдЖрдпрд╛рдд рдХрд░реЗрдВ
- рдЖрдпрд╛рдд sys, os, tempfile, рдЕрдЪрд╛рд░
- рдЖрдпрд╛рдд xmlrpclib, рдЧреЗрдЯрдкрд╛рд╕, рд╕реНрдЯреНрд░рд┐рдВрдЧ
- base64, urllib2, cookielib рдЖрдпрд╛рдд рдХрд░реЗрдВ
- рдпреВрд░реАрд▓рд┐рдм рдЖрдпрд╛рдд рд╕реЗ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж, рд╕реНрдкреНрд▓рд┐рдЯрд╛рдЗрдк, рд╕реНрдкреНрд▓рд┐рдереЛрд╕реНрдЯ, рдЧреЗрдЯрдкреНрд░реЙрдХреНрд╕реА
- рдЖрдпрд╛рдд urllib2
- #################################
- useProxy = рд╕рдЪ
- useAuthOnProxy = рд╕рддреНрдп
- рдкреНрд░реЙрдХреНрд╕реАрд╡рд░ = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо"
- xyPassword = "рдкрд╛рд╕рд╡рд░реНрдб"
- рдкреНрд░реЙрдХреНрд╕реАрд╕реЗрд╡рд░ = "http://proxy.org {128 "
- httpAuthName = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛"
- httpAuthPassword = "рдкрд╛рд╕рд╡рд░реНрдб"
- serverTopLevelURL = "http://my.server.com"
- #################################
- рдХреНрд▓рд╛рд╕ рдЙрд░рд▓рд┐рдмрдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ ( xmlrpclibред рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ):
- рдбрд┐рдо рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ (рд╕реЗрд▓реНрдл, рд╣реЛрд╕реНрдЯ, рд╣реИрдВрдбрд▓рд░, request_body, рд╡рд░реНрдмреЛрдЬрд╝ = 0 ):
- self .verbose = рдХреНрд░рд┐рдпрд╛
- рдЕрдЧрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ :
- рдЕрдЧрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рд╕реНрд╡рдпрдВ .proxyurl = "http: //" +xyUser + ":" \
- +xyPassword + "@"
- + рдкреНрд░реЙрдХреНрд╕реАрд╡рд░ [ 7 :]
- рдФрд░ :
- self .proxyurl =xyServer
- рдФрд░ :
- self .proxyurl = рдХреЛрдИ рдирд╣реАрдВ
- puser_pass = рдХреЛрдИ рдирд╣реАрдВ
- рдпрджрд┐ рд╕реНрд╡ .proxyurl рдХреЛрдИ рдирд╣реАрдВ рд╣реИ:
- рдкреНрд░рдХрд╛рд░, r_type = splittype ( рд╕реНрд╡рдпрдВ .proxyurl)
- рдлреЛрд╕реНрдЯ, XXX = рд╕реНрдкреНрд▓рд┐рдереЛрд╕реНрдЯ (r_type)
- рдЕрдЧрд░ '@' рдлреЙрд╕реНрдЯ рдореЗрдВ:
- user_pass, phost = phost.split ( '@' , 1 )
- рдЕрдЧрд░ user_pass рдореЗрдВ ':'
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╛рд╕рд╡рд░реНрдб = user_pass.split ( ':' , 1 )
- puser_pass = base64 .encodestring (
- '% s:% s' % (unquote (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛), unquote (рдкрд╛рд╕рд╡рд░реНрдб)))ред рдкрдЯреНрдЯреА ()
- рдкреНрд░реЙрдХреНрд╕реА = { 'http' : 'http: //% s' % phost}
- рдпрдЬрдорд╛рди = рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж (рдореЗрдЬрд╝рдмрд╛рди)
- рдкрддрд╛ = "http: //% s% s" % (рдореЗрдЬрдмрд╛рди, рд╣реИрдВрдбрд▓рд░)
- рдЕрдиреБрд░реЛрдз = urllib2ред рд╕рд╛рдорд╛рдиреНрдп (рдкрддрд╛)
- рдЕрдиреБрд░реЛрдз .add_data (request_body)
- рдЕрдиреБрд░реЛрдз .add_header ( 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ' , рд╕реНрд╡ .user_agent)
- рдЕрдиреБрд░реЛрдз .add_header ( "рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░" , "рдкрд╛рда / xml" )
- # HTTP рдкреНрд░рд╛рдорд╛рдгрд┐рдХ
- password_mgr = urllib2 .HTTPPasswordMgrWithDefaultRealm ()
- top_level_url = serverTopLevelURL
- password_mgr.add_password (рдХреЛрдИ рдирд╣реАрдВ,
- top_level_url,
- httpAuthName,
- httpAuthPassword)
- рд╣реИрдВрдбрд▓рд░ = urllib2 .HTTPBasicAuthHandler (password_mgr)
- # рдХреБрдХреАрдЬрд╝
- cj = cookielib .CookieJar ()
- рдЕрдЧрд░ puser_pass:
- # рдПрдирдЯреАрдПрд▓рдПрдо
- рдкрд╛рд╕рдореИрди = urllib2 .HTTPPasswordMgrWithDefaultRealm ()
- passman.add_password (рдХреЛрдИ рдирд╣реАрдВ, serverTopLevelURL, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╛рд╕рд╡рд░реНрдб)
- OrdNTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler (рдкрд╛рд╕рдореИрди)
- рдЕрдиреБрд░реЛрдз .add_header ( 'рдкреНрд░реЙрдХреНрд╕реА-рдкреНрд░рд╛рдзрд┐рдХрд░рдг' , 'рдореВрд▓' + puser_pass)
- xy_support = urllib2 .ProxyHandler (рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ)
- рд╕рд▓рд╛рдореА рдмрд▓реНрд▓реЗрдмрд╛рдЬ = urllib2 .build_opener (рд╣реИрдВрдбрд▓рд░, рдкреНрд░реЙрдХреНрд╕реА_рдмрд┐рд▓,
- urllib2 .HTTPCookieProcessor (cj),
- authNTLM)
- рдПрд▓рд┐рдлрд╝ рд╕реНрд╡ .proxyurl:
- # рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЙрдХреНрд╕реА
- xy_support = urllib2 .ProxyHandler (рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ)
- рд╕рд▓рд╛рдореА рдмрд▓реНрд▓реЗрдмрд╛рдЬ = urllib2 .build_opener (рдкреНрд░реЙрдХреНрд╕реА_ рдЙрдкрдпреЛрдЧрд┐рддрд╛,
- рд╣реИрдВрдбрд▓рд░,
- urllib2 .HTTPCookieProcessor (cj))
- рдФрд░ :
- # рд╕реАрдзрд╛ рд╕рдВрдмрдВрдз
- xy_support = urllib2 .ProxyHandler ({})
- рд╕рд▓рд╛рдореА рдмрд▓реНрд▓реЗрдмрд╛рдЬ = urllib2 .build_opener (рдкреНрд░реЙрдХреНрд╕реА_ рдЙрдкрдпреЛрдЧрд┐рддрд╛,
- рд╣реИрдВрдбрд▓рд░,
- urllib2 .HTTPCookieProcessor (cj))
- urllib2 .install_opener (рдУрдкрдирд░)
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = urllib2 .urlopen ( рдЕрдиреБрд░реЛрдз )
- рд╕реНрд╡рдВрдп рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рдкреБрдирд╢реНрдЪ
Urllib2 рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ
urllib2 - рдж рдорд┐рд╕рд┐рдВрдЧ рдореИрдиреБрдЕрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рддреНрд░реБрдЯрд┐ рдФрд░ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧред