HttpSession

dodano 06/09/2009

rootCode \

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;

try {

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