HttpSession
dodano 06/09/2009
Prosta, obiektowa obsługa sesji HTTP z wykorzystaniem WinInet.
Do kilku moich bibliotek korzystających z sieci (jak grono++, pinger++ potrzebowałem prostej, najlepiej obiektowej obsługi sesji HTTP. Najlepiej jakby byka to nakładka na windowsowe API sieciowe WinInet, ułatwiająca i upraszczająca do minimum obsługę sieci.
Taki był zaczątek kodu klasy HttpSession. Klasa korzysta z biblioteki Winiet, dzięki prostemu i elastycznemu interfejsowi w bardzo łatwy sposób można pobierać oraz wysyłać dane z/do sieci, ale za to jest uzależniona od systemów Microsoftu. W zamierzeniu miał powstać również interfejs do CURLa, tak aby zapewnić multi-platformowość aplikacji korzystających z tej biblioteki.
Oprócz prostego interfejsu posiada 2 funkcje, służące do szybkiego pobierania i wysyłania plików, które jako argumenty przyjmują adres sieciowy i ścieżkę do pliku - DownloadFile()
i UploadFile()
, które mogą być bardzo przydatne.
Rozwój biblioteki
W planach rozwoju znalazł się punkt mówiący o redesignu całej biblioteki, a nawet o stworzeniu większej i elastycznej biblioteki sieciowej, temat poruszono w notce inet na MalDevBlogu.
Ale czy w obecnych czasach ma sens tworzenie czegoś co już dawno zostało zrobione, w tej czy innej postaci? Kiedy bez problemu można skorzystać z boost::asio?
Example
Prosty przykład użycia klasy HttpSession.
HttpSession http;</p>
<p>try {</p>
<pre><code>http.Connect("localhost", 80); // nawiazanie polaczenia
http.InitArgs(); // inicjacja argumentow
http.AddGetArg("name", "value"); // dodanie aregumentu GET
http.AddPostArg("name", "value"); // dodanie aregumentu POST
http.AddFileArg("file", "C:\\plik.txt"); // upload pliku
// przy braku podania MIME Type, zostanie ono zidentyfikwoane po rozszerzeniu pliku
http.Request("/test/index.php"); // wyslanie zapytania
// sprawdzenie statusu odpowiedzi i pobranie zwroconej zawartosci
std::string header, content;
if (http.StatusCode() == 200) {
http.ResponseHeader(header);
http.ResponseContent(content);
}
std::cout << "odpowiedz serwera: " << http.StatusCode() << ": " << http.StatusText() << "\n";
std::cout << "header:\n" << std::endl << header << "\n";
std::cout << "content:\n" << std::endl << content << "\n";
} catch (const HttpException& e) { std::cout << "wyjatek o kodzie " << e.code() << " w " << e.where() << ":\n"; std::cout << e.what() << std::endl; }
Licencja
Klasa HttpSession licencjonowana jest na zasadach licencji MIT.
Download
- HttpSession.zip
[7.72 KB]
pobrano 262 razy
dodano 06/09/2009 - źródła klasy rev. 7 (20/01/2008) z przykładem użycia
Uwaga
Prawdopodobnie biblioteka nie będzie już dalej rozwijana, mimo iż przydałoby się kilka dodatkowych możliwości jak chociażby obsługa cookies, czy mechanizm informowania o postępie down/up-loadu.
Linki
aktualizacja 06/09/2009