Najpierw standardowa biblioteka urllib2. W python-ie 3, została podzielona na dwie, urllib.request oraz urllib.error. W pierwszej kolejności przerabiamy parametry, które wstawimy do zapytania za pomocą urlencode() do "url-encoded" string (spacja na %20 itp.). Następnie tworzymy zapytanie url - request.Request(). Jeżeli zostanie dostarczony parametr data (jak w tym przypadku), to zapytanie będzie typu POST.
#! /usr/bin/env python3 import urllib.parse import urllib.request def post1(): url = 'http://requestb.in/kcco1337' post_data = urllib.parse.urlencode({'login': 'user1', 'password': 'hasło 1'}) binary_data = post_data.encode('utf-8') req = urllib.request.Request(url, data=binary_data) u = urllib.request.urlopen(req) print(u.read())Raw body odebrane przez requestb.in:
login=user1&password=has%C5%82o+1Urllib zbiera sporo krytyki, jako nieodpowiadający naszym czasom i trudny w obsłudze (muszę się z tym troszkę zgodzić). Alternatywę, którą znalazłem jest biblioteka requests, której działania nie muszę nawet opisywać.
#! /usr/bin/env python3 import requests def post2(): url = 'http://requestb.in/kcco1337' r = requests.post(url, data={'login': 'user1', 'password': 'hasło 2'}) print(r.status_code) print(r.content)Jedyną rzeczą, której nie jestem pewny jest kodowanie, najwyraźniej jednak w tym przykładzie wszystko poszło ok. Odebrane raw body:
password=has%C5%82o+2&login=user1
Brak komentarzy:
Prześlij komentarz