请问怎么用ClientSocket控件实现HTTP的GET方法? 例如我要访问“http://www.baidu.com/home.html”这个页面应该怎么构造封包呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考:http://blog.csdn.net/unsigned/archive/2008/09/22/2960982.aspx 也可以用现成的组件,如TIdHTTP来实现。 up unsigned bloghttp://blog.csdn.net/unsigned/archive/2008/09/22/2960982.aspx 用的办法可以,不过需要自己组装HTTP,可以使用一些现成的控件,下面是一些方法,HTTP: THTTPSend你可以换成INDY的HTTP控件function HttpGetText(const URL: string; const Response: TStrings; HeaderList: string): Boolean;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try if HeaderList <> '' then HTTP.Headers.Add(HeaderList); Result := HTTP.HTTPMethod('GET', URL); Response.LoadFromStream(HTTP.Document); finally HTTP.Free; end;end;function HttpGetText(const URL: string; const Response: TStrings; const ProxyHost, ProxyPort: string; HeaderList: string): Boolean; overload;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try HTTP.ProxyHost := ProxyHost; HTTP.ProxyPort := ProxyPort; if HeaderList <> '' then HTTP.Headers.Add(HeaderList); Result := HTTP.HTTPMethod('GET', URL); Response.LoadFromStream(HTTP.Document); finally HTTP.Free; end;end;function HttpGetBinary(const URL: string; const Response: TStream; HeaderList: string): Boolean;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try if HeaderList <> '' then HTTP.Headers.Add(HeaderList); Result := HTTP.HTTPMethod('GET', URL); Response.Seek(0, soFromBeginning); Response.CopyFrom(HTTP.Document, 0); finally HTTP.Free; end;end;function HttpGetBinary(const URL: string; const Response: TStream; const ProxyHost, ProxyPort: string; HeaderList: string): Boolean; overload;var HTTP: THTTPSend;begin Result := False; HTTP := THTTPSend.Create; try HTTP.ProxyHost := ProxyHost; HTTP.ProxyPort := ProxyPort; if HeaderList <> '' then HTTP.Headers.Add(HeaderList); Result := HTTP.HTTPMethod('GET', URL); Response.Seek(0, soFromBeginning); Response.CopyFrom(HTTP.Document, 0); finally HTTP.Free; end;end;function HttpPostBinary(const URL: string; const Data: TStream): Boolean;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try HTTP.Document.CopyFrom(Data, 0); HTTP.MimeType := 'Application/octet-stream'; Result := HTTP.HTTPMethod('POST', URL); Data.Seek(0, soFromBeginning); Data.CopyFrom(HTTP.Document, 0); finally HTTP.Free; end;end;function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try HTTP.Document.Write(Pointer(URLData)^, Length(URLData)); HTTP.MimeType := 'application/x-www-form-urlencoded'; Result := HTTP.HTTPMethod('POST', URL); Data.CopyFrom(HTTP.Document, 0); finally HTTP.Free; end;end;function HttpPostURL(const URL, URLData: string; const Data: TStream; const AProxySvr, AProxyPrt: string): Boolean;var HTTP: THTTPSend;begin HTTP := THTTPSend.Create; try HTTP.ProxyHost := AProxySvr; HTTP.ProxyPort := AProxyPrt; HTTP.Document.Write(Pointer(URLData)^, Length(URLData)); HTTP.MimeType := 'application/x-www-form-urlencoded'; Result := HTTP.HTTPMethod('POST', URL); Data.CopyFrom(HTTP.Document, 0); finally HTTP.Free; end;end;function HttpPostURL(const URL, URLData: string; var Data: string): Boolean; overload;var AData: TMemoryStream; slRet: TStringList;begin AData := TMemoryStream.Create; try Result := HttpPostURL(URL, URLData, AData); if Result then begin slRet := TStringList.Create; try AData.Position := 0; slRet.LoadFromStream(AData); Data := slRet.Text; finally slRet.Free; end; end; finally AData.Free; end;end;function HttpPostURL(const URL, URLData: string; var Data: string; const AProxySvr, AProxyPrt: string): Boolean; overload;var AData: TMemoryStream; slRet: TStringList;begin AData := TMemoryStream.Create; try Result := HttpPostURL(URL, URLData, AData, AProxySvr, AProxyPrt); if Result then begin slRet := TStringList.Create; try AData.Position := 0; slRet.LoadFromStream(AData); Data := slRet.Text; finally slRet.Free; end; end; finally AData.Free; end;end;function HttpPostFile(const URL, FieldName, FileName: string; const Data: TStream; const ResultData: TStrings): Boolean;var HTTP: THTTPSend; Bound, s: string;begin Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary'; HTTP := THTTPSend.Create; try s := '--' + Bound + CRLF; s := s + 'content-disposition: form-data; name="' + FieldName + '";'; s := s + ' filename="' + FileName +'"' + CRLF; s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF; HTTP.Document.Write(Pointer(s)^, Length(s)); HTTP.Document.CopyFrom(Data, 0); s := CRLF + '--' + Bound + '--' + CRLF; HTTP.Document.Write(Pointer(s)^, Length(s)); HTTP.MimeType := 'multipart/form-data; boundary=' + Bound; Result := HTTP.HTTPMethod('POST', URL); ResultData.LoadFromStream(HTTP.Document); finally HTTP.Free; end;end; CLIENTSOCKET连接成功后会调用一次ONWRITE事件,在ONWRITE事件中构建完整的HTTP头,发送给对方就可以,HTTP头可以用抓包软件抓IE的第一个包看看.之后就是ONREAD直到下载完ONDISCONNECT delphi能在win7上运行吗?跟xp上开发有什么区别没有? 关于文件内容的比较算法求救????? 使用UEDIT32的朋友快来,我有好东东送给大家,同时散分!! 获得数据库的系统时间?? 我没有任何语言基础,想直接学Delphi 有难度吗? 物归原主,散分5000,no.4 急,急,关于汉化问题,请大家指点,拜谢了 怎么做ActiveX控件?很急!先出100分!!不够还有 大虾们请总结一下 nononono过来拿分(闲人勿进) 关于Delphi和access的非法访问问题 串口通信出错,请帮我看看
http://blog.csdn.net/unsigned/archive/2008/09/22/2960982.aspx
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
if HeaderList <> '' then
HTTP.Headers.Add(HeaderList);
Result := HTTP.HTTPMethod('GET', URL);
Response.LoadFromStream(HTTP.Document);
finally
HTTP.Free;
end;
end;function HttpGetText(const URL: string; const Response: TStrings;
const ProxyHost, ProxyPort: string; HeaderList: string): Boolean; overload;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
HTTP.ProxyHost := ProxyHost;
HTTP.ProxyPort := ProxyPort;
if HeaderList <> '' then
HTTP.Headers.Add(HeaderList);
Result := HTTP.HTTPMethod('GET', URL);
Response.LoadFromStream(HTTP.Document);
finally
HTTP.Free;
end;
end;function HttpGetBinary(const URL: string; const Response: TStream; HeaderList: string): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
if HeaderList <> '' then
HTTP.Headers.Add(HeaderList);
Result := HTTP.HTTPMethod('GET', URL);
Response.Seek(0, soFromBeginning);
Response.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;function HttpGetBinary(const URL: string; const Response: TStream;
const ProxyHost, ProxyPort: string; HeaderList: string): Boolean; overload;
var
HTTP: THTTPSend;
begin
Result := False;
HTTP := THTTPSend.Create;
try
HTTP.ProxyHost := ProxyHost;
HTTP.ProxyPort := ProxyPort;
if HeaderList <> '' then
HTTP.Headers.Add(HeaderList);
Result := HTTP.HTTPMethod('GET', URL);
Response.Seek(0, soFromBeginning);
Response.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;function HttpPostBinary(const URL: string; const Data: TStream): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
HTTP.Document.CopyFrom(Data, 0);
HTTP.MimeType := 'Application/octet-stream';
Result := HTTP.HTTPMethod('POST', URL);
Data.Seek(0, soFromBeginning);
Data.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
HTTP.Document.Write(Pointer(URLData)^, Length(URLData));
HTTP.MimeType := 'application/x-www-form-urlencoded';
Result := HTTP.HTTPMethod('POST', URL);
Data.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;function HttpPostURL(const URL, URLData: string; const Data: TStream;
const AProxySvr, AProxyPrt: string): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
HTTP.ProxyHost := AProxySvr;
HTTP.ProxyPort := AProxyPrt;
HTTP.Document.Write(Pointer(URLData)^, Length(URLData));
HTTP.MimeType := 'application/x-www-form-urlencoded';
Result := HTTP.HTTPMethod('POST', URL);
Data.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;function HttpPostURL(const URL, URLData: string; var Data: string): Boolean; overload;
var
AData: TMemoryStream;
slRet: TStringList;
begin
AData := TMemoryStream.Create;
try
Result := HttpPostURL(URL, URLData, AData);
if Result then
begin
slRet := TStringList.Create;
try
AData.Position := 0;
slRet.LoadFromStream(AData);
Data := slRet.Text;
finally
slRet.Free;
end;
end;
finally
AData.Free;
end;
end;function HttpPostURL(const URL, URLData: string; var Data: string;
const AProxySvr, AProxyPrt: string): Boolean; overload;
var
AData: TMemoryStream;
slRet: TStringList;
begin
AData := TMemoryStream.Create;
try
Result := HttpPostURL(URL, URLData, AData, AProxySvr, AProxyPrt);
if Result then
begin
slRet := TStringList.Create;
try
AData.Position := 0;
slRet.LoadFromStream(AData);
Data := slRet.Text;
finally
slRet.Free;
end;
end;
finally
AData.Free;
end;
end;function HttpPostFile(const URL, FieldName, FileName: string;
const Data: TStream; const ResultData: TStrings): Boolean;
var
HTTP: THTTPSend;
Bound, s: string;
begin
Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
HTTP := THTTPSend.Create;
try
s := '--' + Bound + CRLF;
s := s + 'content-disposition: form-data; name="' + FieldName + '";';
s := s + ' filename="' + FileName +'"' + CRLF;
s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;
HTTP.Document.Write(Pointer(s)^, Length(s));
HTTP.Document.CopyFrom(Data, 0);
s := CRLF + '--' + Bound + '--' + CRLF;
HTTP.Document.Write(Pointer(s)^, Length(s));
HTTP.MimeType := 'multipart/form-data; boundary=' + Bound;
Result := HTTP.HTTPMethod('POST', URL);
ResultData.LoadFromStream(HTTP.Document);
finally
HTTP.Free;
end;
end;