请问怎么得到要访问网页的源码(可能要模仿IE) ( 积分: 50 )

  • 主题发起人 主题发起人 abc123123
  • 开始时间 开始时间
A

abc123123

Unregistered / Unconfirmed
GUEST, unregistred user!
我本来是这样子得到的:
html:=idhttp1.get('http://www.website.com/read.php?tid='+memo1.lines.strings);

但是有个网站用这个代码时网页会提示:
we allow searches from only a valid browser
提示要有效的浏览才可以访问(如IE,firefox之类的吧),请问这个要怎么呢?
谢谢
 
我也在做呢?也出现了问题、
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3662199
 
IDHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'; //IE 6.0
 
同时也要允许 Url 重定向...
IDHTTP.HandleRecirects := True;
 
楼上的名字很吓人!
 
别看他名字吓人,可是高高手哦。
 
不好意思,请问具体是怎么弄呢?
我添加了程序员说的那两句后,结果提示还是一样
 
那是人家服务器上面装了防DDOS、防盗链保护系统导致的
你只要模拟IE发送HTTP请求的的数据头就可以了
 
用UrlDownloadToFile()试试,模块里面引用URLMon, ShellApi,你试试,呵呵,你写出要出问题的一个具体地址也好作试验啊:

Uses URLMon, ShellApi;
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;
 
把URL给出一下,我看看……
 
最土的方法就是使用http连接手动发每条请求
我们处理这种情况一个比较简单的方法是先使用flashget1.4版本,下载,没下载完的时候停掉,这是可以看到握手的全过程,仿照那个过程发header就行了
 
多谢楼上几位,URL是:
http://www.vision-search.net/directory/Auto
其中最后的auto是memo1里的内容。可以为其他单词:host,car,cloth等等之类的任意单词
请帮我试验一下,代码要怎么写?谢谢
 
以下代码可以解决你的问题:

uses WinInet;
function GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end;
使用方法:
var
webConent:string;
begin
webConent:= GetWebPage('http://www.vision-search.net/directory/Auto');
showmessage(webConent);
end;
 
对于特殊的HTTP封包 用idhttp的话恐怕要修改idhttp的代码
楼上所有回答都看出不"专业" 暴露一下我的自制HTTP单元的上半截 函数就不给你看了 哈哈
{*******************************************************}
{ }
{ 自定义发送HTTP请求单元 2007年2月8日完成 }
{ }
{ Copyright (c)冰力不足 QQ:55423726 指导老师:黑冰 }
{ }
{*******************************************************}
unit BLHttp;

interface

uses
Windows, SysUtils, Classes, Forms, winsock, Dialogs,BLFunc;

type
BLHttpInfo = record
Mode:integer; //模式 1为get 2为post 3为下载文件图片等
Server:string; //服务器
Port:integer; //端口
Url:string; //网址
Referer:string; //引用网址
RequestData:String; //post出去的str
CookieSend:string; //发送出去的Cookie
CookieUltimate:string; //返回的终极Cookie
Data: TMemoryStream; //返回的数据流 可用于显示图片等
//DataLen:integer; //返回的数据流长度
HttpHead: String; //Http头文件
//HttpHeadLen:integer; //Http头文件长度
Succeed:integer; //http响应状态代码 等于200则成功
RecvMessage:string; //错误(成功)消息
end;

type
BLHttpThread = class(TThread)
public
HttpInfo: BLHttpInfo;
constructor Create(ABLHttpInfo:BLHttpInfo);
private
//function GetValue(AALLStr, AStartStr, AEndStr:string; var Value:string):boolean;
//procedure BLHttpComplete;
protected
procedure Execute; override;
end;
//以下3个函数放在外面便于直接引用
......
 
var
_HTTP : TIDHTTP;
TempData : String;
begin
_HTTP := TIDHTTP.Create(Form1);
_HTTP.HandleRedirects :=True;
_HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)';
try
TempData := _HTTP.Get('http://www.vision-search.net/directory/Auto');
Memo1.Text := TempData;
except
Memo1.Text := 'Error!';
end;
end;
 
用ethereal之类的监视ie浏览时的数据通信,
然后照着改改idhttp的头试试呢
 
全部程序我这是这样写,可还是提示那个错误,怎么办呢?

var
_HTTP : TIDHTTP;
a,i:integer;
html,judgeword:string;

begin
_HTTP := TIDHTTP.Create(Form1);
_HTTP.HandleRedirects :=True;
_HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)';

judgeword:='PAID LISTING';
a:=memo1.lines.count-1;
try
for i:=0 to a do
begin
html:=idhttp1.get('http://www.vision-search.net/directory/'+memo1.lines.strings);
end;
except

end;
 
后退
顶部