HttpSock.pas
01.01.2007
unit HttpSock; { CrtSocket for Delphi 32 Copyright (C) 1999-2001 Paul Toth <tothpaul@free.fr> http://tothpaul.free.fr This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } interface function URLEncode(s:string):string; function URLDecode(s:string):string; function HttpGet(server,url:string; var header:string):string; function HttpPost(server,url,data:string; var header:string):string; implementation uses crtsock,sysutils; function URLEncode(s:string):string; // http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1738.html var i:integer; c:char; begin result:=''; for i:=1 to length(s) do begin c:=s[i]; case c of // non-ASCII #$00..#$1F,#$7F,#$80..#$FF, // unsafe {' ',}'<','>','"','#','%','}','|','\','^','~', '[', ']', '`', // reserved ';','/','?',':','@','=','&', '$','-','_','.','+','!','*','''','(',')': result:=result+'%'+IntToHex(ord(c),2); ' ' :result:=result+'+'; else result:=result+c; end; end; end; function URLDecode(s:string):string; var i:integer; begin result:=''; i:=1; while i<=length(s) do begin case s[i] of '+':result:=result+' '; '%':begin s[i]:='$'; result:=result+chr(StrToInt(copy(s,i,3))); inc(i,2); end; else result:=result+s[i]; end; inc(i); end; end; function HttpGet(server,url:string; var header:string):string; var handle:integer; sin,sout:textfile; s:string; begin handle:=callserver(server,80); if handle<=0 then begin result:=''; exit; end; assigncrtsock(handle,sin,sout); writeln(sout,'GET ',url,' HTTP/1.0'); writeln(sout,'Accept: */*'); writeln(sout,'Accept-Language: fr'); writeln(sout,'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; FREE)'); // writeln(sout,'User-Agent: MySoft/1.0 (Delphi)'); writeln(sout,'Connection: Keep-Alive'); if header<>'' then writeln(sout,header); writeln(sout); header:=''; result:=''; readln(sin,s); while s<>'' do begin header:=header+s; readln(sin,s); end; while not eof(sin) do begin readln(sin,s); result:=result+s; end; disconnect(handle); end; function HttpPost(server,url,data:string; var header:string):string; var handle:integer; sin,sout:textfile; s:string; begin handle:=callserver(server,80); if handle<=0 then begin result:=''; exit; end; assigncrtsock(handle,sin,sout); writeln(sout,'POST ',url,' HTTP/1.0'); writeln(sout,'Accept: */*'); writeln(sout,'Accept-Language: fr'); writeln(sout,'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; FREE)'); // writeln(sout,'User-Agent: MySoft/1.0 (Delphi)'); writeln(sout,'Content-length: ',Length(data)); writeln(sout,'Connection: Keep-Alive'); if header<>'' then writeln(sout,header); writeln(sout); write(sout,data); header:=''; result:=''; readln(sin,s); while s<>'' do begin header:=header+s; readln(sin,s); end; while not eof(sin) do begin readln(sin,s); result:=result+s; end; disconnect(handle); end; end.