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