Pycurl: Difference between revisions
No edit summary |
No edit summary |
||
Line 77: | Line 77: | ||
<references /> | <references /> | ||
[[category: | [[category:python]] |
Latest revision as of 11:24, 7 August 2015
Overview
Python curl 라이브러리 pycurl 사용법 설명
Basic
기본적인 pycurl 동작 방식은 다음과 같다. 원문은 이곳<ref>http://pycurl.sourceforge.net/doc/quickstart.html</ref>을 참조하자.
1. Create a pycurl.Curl() instance. 2. Use setopt to set options. 3. Call perform to perform the operation.
setopt
pycurl 의 기본적인 동작 방식을 살펴보면, 모든 동작은 실행 전 설정된 setopt 값에 의해 결정된다는 것을 알 수 있다.
setopt 에서 사용할 수 있는 설정 값들은 libcurl 에서 설정할 수 있는 값들과 거의 같다. 몇가지 옵션들을 제외한 대부분의 값들을 설정할 수 있는데, libcurl 에서 설정하는 옵션 값에서 CURLOPT_접두어를 제외하고 사용하면 된다. 가령, 예를들어 CURLOPT_URL 이라는 설정값이 있다면 그냥 URL 만 입력하면 된다.
참고로 libcurl 에서 사용가능한 setopt 의 값들은 이곳<ref>http://curl.haxx.se/libcurl/c/curl_easy_setopt.html</ref>에서 확인할 수 있다.
Methods
GET과 POST는 pycurl 기본 메소드로 지원한다. 하지만 그 외의 메소들은 다른 방법을 써야 한다. 원문은 이곳<ref>http://anupamshakya.blogspot.dk/2013/07/implementation-of-put-and-delete-in.html</ref>에서 확인할 수 있다. <source lang=python>
# set method if method == "POST": conn.setopt(pycurl.HTTPPOST, 1) elif method == "GET": conn.setopt(pycurl.HTTPGET, 1) elif method == "PUT": conn.setopt(pycurl.CUSTOMREQUEST, "PUT") elif method == "DELETE": conn.setopt(pycurl.CUSTOMREQUEST, "DELETE") else: raise Exception("Unsupported method.")
</source>
SSL
Stack overflow 에 좋은 예제가 있었다. 원문은 이곳<ref>http://stackoverflow.com/questions/6999565/python-https-get-with-basic-authentication</ref>을 참조하자.
<source lang=python> import pycurl import cStringIO import base64
headers = { 'Authorization' : 'Basic %s' % base64.b64encode("admin:1234") }
response = cStringIO.StringIO() conn = pycurl.Curl()
conn.setopt(pycurl.VERBOSE, 1) conn.setopt(pycurl.HTTPHEADER, ["%s: %s" % t for t in headers.items()])
conn.setopt(pycurl.URL, "https://kldp.org")
conn.setopt(pycurl.POST, 1)
conn.setopt(pycurl.SSL_VERIFYPEER, False) conn.setopt(pycurl.SSL_VERIFYHOST, False)
conn.setopt(pycurl.WRITEFUNCTION, response.write)
conn.setopt(pycurl.HTTPGET, 1)
conn.perform()
http_code = conn.getinfo(pycurl.HTTP_CODE) if http_code is 200:
print response.getvalue()
</source>
위의 예제에서 주의할 점은 pycurl.SSL_VERIFYPEER, pycurl.SSL_VERIFYHOST 이다. 접속하는 사이트의 ssl 인증서 검증을 하지 않겠다는 의미이다. curl -k 옵션과 같은 역할을 한다.
References
<references />