<p>์š”์ฒญ ๊ฐ•์ œ ์žฌ์ •์˜ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ</p>

์— ๋งŒ๋“  2013๋…„ 07์›” 11์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: psf/requests

URL ์ธ์ฝ”๋”ฉ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ํ”Œ๋žซํผ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

params = {'fiz': 'foo:bar', 'biz': 'barfoo'}

์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ URL

http://localhost/?fiz=foo%3Abar&biz=barfoo

๋ ˆ๊ฑฐ์‹œ ํ”Œ๋žซํผ์— ํ•„์š”ํ•œ URL

http://localhost/?fiz=foo:bar&biz=barfoo

์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ณ  URL์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์š”์ฒญ์ด ์ด ์ฟผ๋ฆฌ๋ฅผ ๋””์ฝ”๋”ฉํ•˜๊ณ  ๋‹ค์‹œ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.

improt urllib
qry = urllib.urlencode(params).replace('%3A', ':')
requests.get(url+'?'+qry) #: requests encodes the colon back to %3A

์ง์„  urllib2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒํผ ์žฅํ™ฉํ•ด ๋ณด์ด์ง€ ์•Š๋Š” ๋น ๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

API์— ์—ฐ๊ฒฐ๋œ "์•ˆ์ „ํ•œ" ๋˜๋Š” "๊ต์ฒด" ๋ชฉ๋ก์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ python 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)

๋‹ค๋ฅธ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด URL์„ ์ „์†กํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝํ•˜๋Š” ์ „์†ก ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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)

๋‹ค๋ฅธ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด URL์„ ์ „์†กํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝํ•˜๋Š” ์ „์†ก ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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)

์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

requests.post() ๋ฐ requests.get() http://stackoverflow.com/a/26344315/1056345 ์˜ json ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰