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