Uwaga! Ta strona nie była aktualizowana od ponad 10 lat, więc może zawierać przestarzałe informacje.
Najświeższe informacje znajdziesz obecnie na moim blogu: blog.malcom.pl ;)

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;</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 &lt;&lt; "odpowiedz serwera: " &lt;&lt; http.StatusCode() &lt;&lt; ": " &lt;&lt; http.StatusText() &lt;&lt; "\n";
std::cout &lt;&lt; "header:\n"  &lt;&lt; std::endl &lt;&lt; header  &lt;&lt; "\n";
std::cout &lt;&lt; "content:\n" &lt;&lt; std::endl &lt;&lt; content &lt;&lt; "\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 253 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