// Generic HTML handler/parser // #include #include #include #include #include "urlencode.c" #include "htmtag.c" #define MAXSTRLEN 4096 #define HTMLSTRLEN MAXSTRLEN char htmlstr[HTMLSTRLEN]; char*htmls=htmlstr; char*absURL; char linestr[MAXSTRLEN]; int linestrlen=0; FILE*fo; int istag=0; int pref=0; int rowlen=0,lastchr=' '; int lastchr; int form=0; int desiredform=32767; char desiredformname[]="postcomment"; int usesubmit=0; int textarea=0; int formnum=0; char formname[256]=""; char selectname[256]=""; int isheader=0; long inputline=0; void xfputs(char*s) { char*sp; sp=s;while(sp[0]){if(sp[0]==0x02)sp[0]=' ';sp++;} fprintf(fo,"%s",s); } void flushtag() { htmls[0]=0; if(allowoutput())xfputs(htmlstr); htmls=htmlstr; } void normalizetag(char*s) { char*s1; int t; char c; int quot=0; for(t=0;t1)printf("\n"); printf("FORM:%i:%s|METHOD:%s|ACTION:%s\n",formnum,formname,s3,s1); } void handlebasetag(char*s) { char s1[4096],s2[4096],s3[4096],s4[4096]; s1[0]=0;s2[0]=0;s3[0]=0;s4[0]=0; formname[0]=0;formnum++; gethtmltagvalue(s,"HREF",s1); printf("BASE|HREF:%s\n",s1); } void handleformtag(char*s) { int n=0; if(!strncmpi(s,"
htmlstr+1){flushtag();return;} if(c=='!')if(!strncmp(htmlstr,"'){handletag();htmls=htmlstr;htmls[0]=0;} } void handlelinestr() { // return; linestr[linestrlen]=0; if(inputline<2)if(strncmp(linestr,"HTTP/",5))isheader=1; if(isheader)if(!linestr[0])isheader=0; if(isheader)if(!strncasecmp(linestr,"Set-Cookie:",11)) {char*sp; printf("FULLCOOKIE:%s\n",linestr+12); sp=strstr(linestr,"; ");if(sp)sp[0]=0; printf("COOKIE:%s\n",linestr+12); } //printf("LINE:%s\n",linestr); linestrlen=0; inputline++; } void handlechar(int c) { if(linestrlen=' '){linestr[linestrlen]=c;linestrlen++;} // if(c=='\r')if(!textarea)return; if(c=='\n'){if(!textarea)c=' ';handlelinestr();} if(c=='<')istag=1; if(istag){handlehtmlchar(c);return;} if(c=='\n')if(!textarea)c=' '; if(textarea)printurlencodedchar(c); lastchr=c; } void convfile(char*fn,char*fno) { char s[256]; FILE*fi; unsigned int c; if(!fn)fn="-"; if(!strcmp(fn,"-"))fi=stdin;else fi=fopen(fn,"r");if(!fi){fprintf(stderr,"Cannot open file '%s'.\n",fn);return;} if(!fno)fo=stdout;else fo=fopen(fno,"w");if(!fo){fprintf(stderr,"Cannot write to file '%s'.\n",fno);return;} // fo=stdout; for(;;){c=fgetc(fi);if(feof(fi)){break;} handlechar(c);} // fputc(0x1a,fo); fclose(fo); fclose(fi); } void help() { printf( "handleform - for easy decoding of web forms.\n" "Usage: eg. curl | handleform | ...other filters \n" ); } int main(int argc,char*argv[]) { if(argc<1)return; if(argc==1)convfile(NULL,NULL);else if((!strcmp(argv[1],"-h"))||(!strcmp(argv[1],"--help"))){help();return 0;}else if(argc==2)convfile(argv[1],NULL); else convfile(argv[1],argv[2]); return 0; }