RkBlog

Hardware, programming and astronomy tutorials and reviews.

PyCurl i żądania HTTP

Przykłady obsługi żądań HTTP POST/GET za pomocą biblioteki PyCurl

PyCurl to API znanej biblioteki Curl wystawione w Pythonie. Choć Python oferuje nam m.in. urllib2, czy inne interfejsy sieciowe w bibliotece standardowej, to czasem użycie np. PyCurl może ułatwić wykonanie zadania. Dokumentacji typowej nie ma za wiele - mamy testy, parę przykładów i trochę więcej na różnych blogach. Podstawą modułu jest klasa Curl.

Przykłady pycurl

Poniżej przykład wysyłania żądania HTTP z danymi POST:
# -*- coding: utf-8 -*-
import pycurl
import StringIO
b = StringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.POST, 1)
# adres URL
c.setopt(c.URL, "http://localhost:8080/")
# dane POST
c.setopt(c.HTTPPOST, [("klucz1", 'wartość'),("klucz2", 'wartość 2')])
c.setopt(c.NOSIGNAL, 1)
# zapis odpowiedzi HTTP do wirtualnego pliku
c.setopt(pycurl.WRITEFUNCTION, b.write)
# pokazywanie szczegółów połączenia, 1/0
c.setopt(c.VERBOSE, 0)
# wykonanie operacji
c.perform()

# przykładowe dane o wykonanym połączeniu
print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL), c.getinfo(pycurl.TOTAL_TIME)
# odpowiedź na żądanie HTTP (treść strony)
print b.getvalue()
c.close()

Jak w innych językach sposób konfiguracji żądania i jego wykonywania jest dość podobny. Za pomocą metody setopt określamy parametry żądania - takie jak nagłówki, przesyłane dane, poziom debugowania, odbiór zwróconych danych itd. Wszystkie parametry dla setopt znajdziemy w dokumentacji CURL (należy pomijać "CURLOPT_" w nazwach parametrów). Podobnie jest z metodą getinfo, która pozwala pobrać określone informacje o wykonanym żądaniu. Pełna lista parametrów dostępna jest w dokumentacji (należy pomijać "CURLINFO_").

Żeby wysłać np. plik POSTem wystarczy wykorzystać c.FORM_FILE:
c.setopt(c.HTTPPOST, [("ikona", (c.FORM_FILE, "/ścieżka/do/pliku.png"))])
Bibliotekę pycurl wykorzystałem także w artykule:
RkBlog

28 February 2010;

Comment article