Pycurl

From 탱이의 잡동사니
Revision as of 14:02, 5 June 2015 by Pchero (talk | contribs)
Jump to navigation Jump to search

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 />