рдореИрдВ рдПрдХ рд▓реАрдЧреЗрд╕реА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдпреВрдЖрд░рдПрд▓ рдПрдиреНрдХреЛрдбреЗрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
params = {'fiz': 'foo:bar', 'biz': 'barfoo'}
рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдпреВрдЖрд░рдПрд▓
http://localhost/?fiz=foo%3Abar&biz=barfoo
рд▓реАрдЧреЗрд╕реА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдпреВрдЖрд░рдПрд▓
http://localhost/?fiz=foo:bar&biz=barfoo
рдореИрдВрдиреЗ рдПрдХ рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдиреЗ рдФрд░ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреБрд░реЛрдз рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░реЗрдВрдЧреЗред
improt urllib
qry = urllib.urlencode(params).replace('%3A', ':')
requests.get(url+'?'+qry) #: requests encodes the colon back to %3A
рдХреНрдпрд╛ рдХреЛрдИ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╕реАрдзреЗ urllib2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдмреЛрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдпрд╛ "рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди" рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд░рдд рдкрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЕрдЬрдЧрд░ 2.7 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ Requests рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ Request
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ:
import requests
import urllib
url = 'http://test.com/'
qry = urllib.urlencode(params).replace('%3A', ':')
s = requests.Session()
req = requests.Request(method='GET', url=url)
prep = req.prepare()
prep.url = url + qry
r = s.send(prep)
рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдПрдбреЗрдкреНрдЯрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдпреВрдЖрд░рдПрд▓ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
import requests
import urllib
class MutatingAdapter(requests.adapters.HTTPAdapter):
def send(self, request, **kwargs):
main, querystr = request.url.split('?') # Nasty hack, not always valid.
querystr = urllib.unquote(querystr)
querystr = urllib.quote(querystr, '/&:=')
request.url = '?'.join([main, querystr])
super(MutatingAdapter, self).send(request, **kwargs)
рдореИрдВ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рддрд╛ рд╣реВрдВред
рдЖрдк request.post() рдФрд░ request.get() http://stackoverflow.com/a/26344315/1056345 рдХреЗ рдЬреЗрд╕рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ Requests рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ
Request
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ:рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдПрдбреЗрдкреНрдЯрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдпреВрдЖрд░рдПрд▓ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ: