<p>рдЕрдиреБрд░реЛрдз рдмрд▓ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬреБрд▓ре░ 2013  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдореИрдВ рдПрдХ рд▓реАрдЧреЗрд╕реА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдпреВрдЖрд░рдПрд▓ рдПрдиреНрдХреЛрдбреЗрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

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)

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ 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 рдХреЗ рдЬреЗрд╕рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

justlurking picture justlurking  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

everping picture everping  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Gonzalliz picture Gonzalliz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ReimarBauer picture ReimarBauer  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cnicodeme picture cnicodeme  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ