00001 #ifndef __HTTP_TOOLS__ 00002 #define __HTTP_TOOLS__ 00003 00004 #include "INet.h" 00005 00006 extern GXmlTag *ExtractForms(char *Html, GStream *Log); 00007 extern void XmlToStream(GStream *s, GXmlTag *x, char *Css = 0); 00008 extern GXmlTag *GetFormField(GXmlTag *Form, char *Field); 00009 extern char *HtmlTidy(char *Html); 00010 extern GSurface *GetHttpImage(char *Uri); 00011 00012 struct WebPage 00013 { 00014 char *Html; 00015 char *Script; 00016 char *Charset; 00017 GXmlTag *Parsed; 00018 00019 WebPage(char *Page, GStream *Log = 0); 00020 ~WebPage(); 00021 00022 GXmlTag *GetRoot(GStream *Log = 0); 00023 char *GetFormValue(char *field); 00024 char *GetCharSet(); 00025 }; 00026 00027 class FormValue 00028 { 00029 public: 00030 GAutoString Field; 00031 GAutoString Value; 00032 }; 00033 00034 struct FormPost 00035 { 00036 GXmlTag *Form; 00037 GArray<FormValue> Values; 00038 00039 FormPost(GXmlTag *f); 00040 00041 char *GetActionUri(); 00042 char *EncodeFields(GStream *Debug = 0, char *RealFields = 0, bool EncodePlus = false); 00043 FormValue *Get(char *Field, bool Create = true); 00044 bool Set(char *field, char *value, GStream *Log, bool AllowCreate); 00045 GXmlTag *GetField(char *n); 00046 }; 00047 00048 class CookieJar : public GHashTable 00049 { 00050 public: 00051 ~CookieJar() { Empty(); } 00052 00053 void Empty(); 00054 void Set(char *Headers); 00055 void Set(char *Cookie, char *Value); 00056 char *Get(); 00057 }; 00058 00059 class HttpTools 00060 { 00061 void DumpView(GViewI *v, char *p); 00062 00063 protected: 00064 GViewI *Wnd; 00065 00066 public: 00067 HttpTools(); 00068 ~HttpTools(); 00069 00070 void SetWnd(GViewI *i) { Wnd = i; } 00071 char *Fetch(char *uri, GStream *Log, GViewI *Dump, CookieJar *Cookies = 0); 00072 char *Post(char *uri, char *headers, char *body, GStream *Log = 0, GViewI *Dump = 0); 00073 }; 00074 00075 #endif