急,求一个获得指定网址网页代码的程序。 ( 积分: 300 )

  • 主题发起人 主题发起人 睢志强
  • 开始时间 开始时间

睢志强

Unregistered / Unconfirmed
GUEST, unregistred user!
要求如下
1 API 编写,不用控件
2 获得后数据无乱码

我写了个函数,如下:
能获得代码,但是遇到那里边的汉字就出现乱码,而我用影音传送带 下来就正常。
我的代码获得别的站没问题,就那站出问题,求解。

测试地址
http://iii168.com/app/member/

我的函数获得的代码:
<td align="center">寤鸿?鎮ㄤ互 IE 6.0 1024*768 浠ヤ笂楂樺僵妯″紡鐎忚?鏈?珯  <a href="http://www.microsoft.com/taiwan/products/ie/" target="_blank">绔嬪埢涓嬭級IE</a></td>

影音下来的文件,打开后的代码:
<td align="center">建議您以 IE 6.0 1024*768 以上高彩模式瀏覽本站  <a href="http://www.microsoft.com/taiwan/products/ie/" target="_blank">立刻下載IE</a></td>

我的函数
function get(Server:String;Port:integer;Url,oldurl:String):String;
var
len,s:integer;
name:sockaddr_in;
he:PHostEnt;
buf:array[0..1023]of char;
str,data:String;
wsd:WSADATA;
begin
WSAStartup($101,wsd);
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
he:=gethostbyname(PChar(Server));
if he=nil then
Raise Exception.Create('使用Sock连接异常或是指定服务器有误!');

FillChar(name,sizeof(name),0);
name.sin_family:=AF_INET;
name.sin_port:=htons(Port);
name.sin_addr.S_addr:=PDWORD(PDWORD(he.h_addr)^)^;
connect(s,name,sizeof(name));
str := 'GET /'+ Url +' HTTP/1.1'#13#10;
str := str + 'Referer: '+ oldurl + #13#10;
str := str + 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)'#13#10;
str := str + 'Host: ' + Server + #13#10;
str := str + 'Connection: Close'#13#10;
str := str + 'Cache-Control: no-cache'#13#10;
str := str + #13#10;

send(s,PChar(str)^,Length(str),0);
while true do
begin
len:=recv(s,buf,sizeof(buf),0);
if len<1 then
break;
SetString(str,buf,len);
data:=data+str;
end;
closesocket(s);
WSACleanup();
Result := data;
end;
 
要求如下
1 API 编写,不用控件
2 获得后数据无乱码

我写了个函数,如下:
能获得代码,但是遇到那里边的汉字就出现乱码,而我用影音传送带 下来就正常。
我的代码获得别的站没问题,就那站出问题,求解。

测试地址
http://iii168.com/app/member/

我的函数获得的代码:
<td align="center">寤鸿?鎮ㄤ互 IE 6.0 1024*768 浠ヤ笂楂樺僵妯″紡鐎忚?鏈?珯  <a href="http://www.microsoft.com/taiwan/products/ie/" target="_blank">绔嬪埢涓嬭級IE</a></td>

影音下来的文件,打开后的代码:
<td align="center">建議您以 IE 6.0 1024*768 以上高彩模式瀏覽本站  <a href="http://www.microsoft.com/taiwan/products/ie/" target="_blank">立刻下載IE</a></td>

我的函数
function get(Server:String;Port:integer;Url,oldurl:String):String;
var
len,s:integer;
name:sockaddr_in;
he:PHostEnt;
buf:array[0..1023]of char;
str,data:String;
wsd:WSADATA;
begin
WSAStartup($101,wsd);
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
he:=gethostbyname(PChar(Server));
if he=nil then
Raise Exception.Create('使用Sock连接异常或是指定服务器有误!');

FillChar(name,sizeof(name),0);
name.sin_family:=AF_INET;
name.sin_port:=htons(Port);
name.sin_addr.S_addr:=PDWORD(PDWORD(he.h_addr)^)^;
connect(s,name,sizeof(name));
str := 'GET /'+ Url +' HTTP/1.1'#13#10;
str := str + 'Referer: '+ oldurl + #13#10;
str := str + 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)'#13#10;
str := str + 'Host: ' + Server + #13#10;
str := str + 'Connection: Close'#13#10;
str := str + 'Cache-Control: no-cache'#13#10;
str := str + #13#10;

send(s,PChar(str)^,Length(str),0);
while true do
begin
len:=recv(s,buf,sizeof(buf),0);
if len<1 then
break;
SetString(str,buf,len);
data:=data+str;
end;
closesocket(s);
WSACleanup();
Result := data;
end;
 
小弟 过节都在郁闷这个
实在是不知道原因了,
还请在节日气氛中的富翁帮忙啊 。
 
富翁们,我求经啊。
 
刚刚测试 用 memo1.Lines.Text:=IdHTTP1.Get('http://iii168.com/app/member/')
一样得到的乱码
 
过节了还在忙啊?真不容易啊
是不是他做网站的时候的用的编码特殊啊
这个问题我不会,帮你提一下
 
编码的确特殊 UTF-8 的 不是 GB2312 的!
但是为什么 下载软件可以呢?
查看源文件可以呢?
 
那网页用的是UTF-8,可能这个的问题
你试下取GB2312的网页试下喽
 
我就是要取这个页面的啊
他是 UTF-8 的我也德取啊!
取别的页面我的代码没问题
 
HTTP 头 我也 修改好几次了 完全模拟 下载软件 的也不行啊!
郁闷。
 
昨天无解 今天继续问,
诶 为什么就是乱码呢?
 
已经解决!
郁闷
Utf8ToAnsi
 
呵呵,还以为是Big5
 
后退
顶部