while true do
begin
len:= recv(FSocket, buf, sizeof(buf), 0); //接收数据
if len<1 then break;
SetString(str,buf,len);
end;用winsock读取网页的源代码,上面这么写只能接收到header的数据,请问返回的content要如何接收,谢谢。
begin
len:= recv(FSocket, buf, sizeof(buf), 0); //接收数据
if len<1 then break;
SetString(str,buf,len);
end;用winsock读取网页的源代码,上面这么写只能接收到header的数据,请问返回的content要如何接收,谢谢。
var
wsadata: Twsadata;
Fsocket,err: integer;
SockAddrIn: TSockAddrIn;
begin
WSAStartup($0101,wsadata);
Fsocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
if FSocket = invalid_socket then
begin
Result := False;
Exit;
end;
SockAddrIn.sin_addr.s_addr := HostNameToIP('www.kaixin001.com');
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_port := htons(80);
err := connect(FSocket, SockAddrIn, SizeOf(SockAddrIn));
if err = 0 then
begin
sock := FSocket;
Result := True;
end
else
Result := False;
end;procedure StopNet(Fsocket: integer);
begin
closesocket(Fsocket);
WSACleanup;
end;function SendData(FSocket: integer;SendStr: string): integer;
var
err: integer;
begin
err := send(FSocket,pchar(sendstr)^, length(sendstr), 0);
Result := err;
end;function HostNameToIP(S: string): DWord;
var
Host: pHostent;
Address: DWord;
begin
Address := inet_addr(PChar(S));
if (Address = INADDR_NONE) then begin
Host := GetHostByName(Pchar(S));
if Host = nil then begin
HostNameToIP := INADDR_NONE;
exit;
end
else begin
hostNametoip := longint(pointer(Host^.h_addr_list^)^);
exit;
end;
end
else begin
Address := inet_addr(PChar(S));
HostNameToIP := Address;
exit;
end;
end;
procedure TForm1.FlatButton2Click(Sender: TObject);
var
re,Fsocket,Checkit,snum,enum: integer;
Login,Login1,User,Pass,str,data: string;
BufRecv: array[0..1023]of char;
begin
Login:= 'GET /app/app.php HTTP/1.1'+#13#10;
Login:= Login+'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, */*'+#13#10;
Login:= Login+'Referer: http://www.kaixin001.com/home/'+#13#10;
Login:= Login+'Accept-Language: zh-cn'+#13#10;
Login:= Login+'Content-Type: application/x-www-form-urlencoded'#13#10;
Login:= Login+'Accept-Encoding: gzip, deflate'+#13#10;
Login:= Login+'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTJA-E.T.(QinDaHai); .NET CLR 2.0.50727)'+#13#10;
Login:= Login+'Host: www.1111.com'+#13#10;
Login:= Login+'Content-Length: '+inttostr(length(Login1))+#13#10;
Login:= Login+'Connection: Keep-Alive'+#13#10;
Login:= Login+'Cookie: _user='+Cuser+';_email='+Cemail+'; _invisible=0; SERVERID=_srv73_'#13#10#13#10;
StartNet(Fsocket);
Senddata(Fsocket,Login);
while true do
begin
re:= recv(Fsocket,bufrecv,sizeof(bufrecv),0);
if re<1 then break;
SetString(str,bufrecv,re);
data:= data + str;
end;
//if length(data)>100 then FlatEdit1.Text:= data;
FlatMemo1.Text:= data;
StopNet(Fsocket);不好意思,还有要是data的数据是utf8怎样转换,
while true do
begin
ZeroMemory(bufRecv, 1024);
re := recv(FSocket, BufRecv^, 1024, 0);
str := StrPas(bufRecv);
data:= data+str;
if re <> 1024 then break;
end;
FreeMem(BufRecv);已解决,