Delphi ';HTTP/1.1 301永久移动';EIdHTTPProtocolException procedure TForm1.ExtractLinks(constURL:String;constStringList:TStringList); {从URL的标记中提取“href”属性并添加到stringlist。} 变量 i:整数; iDoc:IHTMLDocument2; iHTML:字符串; iv:变体; iLinks:油变异体; iDocURL:字符串; iURI:TidURI; iHref:字符串; iIdHTTP:TIDDHttp; iListItem:TListItem; 开始 StringList.Clear; ListView1.Clear; iURI:=TidURI.Create(URL); 尝试 iDocURL:=“http://”+iURI.Host; 如果iURI.Path“/”那么 iDocURL:=iDocURL+iURI.Path; 最后 自由; 结束; iDoc:=CreateComObject(类\u HTMLDOcument)作为IHTMLDDocument2; 尝试 iDoc.DesignMode:=“打开”; 而iDoc.ReadyState“完成”执行 Application.ProcessMessages; iv:=VarArrayCreate([0,0],varvarvariant); iIdHTTP:=TidHTTP.Create(nil); 尝试 iHTML:=iIdHTTP.Get(URL); 最后 iIdHTTP.免费; 结束; iv[0]:=iHTML; 写(PSafeArray(System.TVarData(iv.VArray)); iDoc.DesignMode:=“关闭”; 而iDoc.ReadyState“完成”执行 Application.ProcessMessages; iLinks:=iDoc.All.Tags('A'); 如果iLinks.Length>0,则 开始 ListView1.Items.BeginUpdate; 对于i:=0到-1+i长度do 开始 iHref:=iLinks.Item(i).href; 如果(iHref[1]='/'),则 iHref:=iDocURL+iHref 否则,如果Pos('about:',iHref)=1,则 iHref:=iDocURL+Copy(iHref,7,长度(iHref)); 如果(isvalidul(iHref))和(IsKnownFormat(iHref)),则 开始 StringList.Add(iHref); iListItem:=ListView1.Items.Add; iListItem.Caption:=iHref; 结束; ListView1.Items.EndUpdate; 结束; 结束; 最后 iDoc:=零; 结束; 结束; 过程TForm1.GetLinks1Click(发送方:TObject); 变量 iUrlList:TStringList; 开始 iUrlList:=TStringList.Create; 尝试 {获取url列表} 提取链接(Url1.Text,iUrlList); 最后 免费; 结束; 结束;
在某些网站上,此代码生成图像URL列表,但在某些网站上,它生成“HTTP/1.1 301永久移动”EIdHTTPProtocolException。是否可能从网页url获取Img url列表,或者我是否做了一些错误的事情?设置Delphi ';HTTP/1.1 301永久移动';EIdHTTPProtocolException procedure TForm1.ExtractLinks(constURL:String;constStringList:TStringList); {从URL的标记中提取“href”属性并添加到stringlist。} 变量 i:整数; iDoc:IHTMLDocument2; iHTML:字符串; iv:变体; iLinks:油变异体; iDocURL:字符串; iURI:TidURI; iHref:字符串; iIdHTTP:TIDDHttp; iListItem:TListItem; 开始 StringList.Clear; ListView1.Clear; iURI:=TidURI.Create(URL); 尝试 iDocURL:=“http://”+iURI.Host; 如果iURI.Path“/”那么 iDocURL:=iDocURL+iURI.Path; 最后 自由; 结束; iDoc:=CreateComObject(类\u HTMLDOcument)作为IHTMLDDocument2; 尝试 iDoc.DesignMode:=“打开”; 而iDoc.ReadyState“完成”执行 Application.ProcessMessages; iv:=VarArrayCreate([0,0],varvarvariant); iIdHTTP:=TidHTTP.Create(nil); 尝试 iHTML:=iIdHTTP.Get(URL); 最后 iIdHTTP.免费; 结束; iv[0]:=iHTML; 写(PSafeArray(System.TVarData(iv.VArray)); iDoc.DesignMode:=“关闭”; 而iDoc.ReadyState“完成”执行 Application.ProcessMessages; iLinks:=iDoc.All.Tags('A'); 如果iLinks.Length>0,则 开始 ListView1.Items.BeginUpdate; 对于i:=0到-1+i长度do 开始 iHref:=iLinks.Item(i).href; 如果(iHref[1]='/'),则 iHref:=iDocURL+iHref 否则,如果Pos('about:',iHref)=1,则 iHref:=iDocURL+Copy(iHref,7,长度(iHref)); 如果(isvalidul(iHref))和(IsKnownFormat(iHref)),则 开始 StringList.Add(iHref); iListItem:=ListView1.Items.Add; iListItem.Caption:=iHref; 结束; ListView1.Items.EndUpdate; 结束; 结束; 最后 iDoc:=零; 结束; 结束; 过程TForm1.GetLinks1Click(发送方:TObject); 变量 iUrlList:TStringList; 开始 iUrlList:=TStringList.Create; 尝试 {获取url列表} 提取链接(Url1.Text,iUrlList); 最后 免费; 结束; 结束;,delphi,delphi-xe4,Delphi,Delphi Xe4,在某些网站上,此代码生成图像URL列表,但在某些网站上,它生成“HTTP/1.1 301永久移动”EIdHTTPProtocolException。是否可能从网页url获取Img url列表,或者我是否做了一些错误的事情?设置iIdHTTP.HandleRedirects:=True这样它会自动开始处理重定向。我想你没有处理重定向。参考这条线索:为什么投反对票?在你问问题之前你应该知道一切吗?我想是的,但是如果我这样做了,那么就没有必要从这个问题开始了。因为只要用谷歌搜索“301 http”就可
iIdHTTP.HandleRedirects:=True
这样它会自动开始处理重定向。我想你没有处理重定向。参考这条线索:为什么投反对票?在你问问题之前你应该知道一切吗?我想是的,但是如果我这样做了,那么就没有必要从这个问题开始了。因为只要用谷歌搜索“301 http”就可以得到“URL重定向”主题。那么您已经知道代码中缺少重定向支持。然后,谷歌搜索“indy http重定向”会将链接I c/ped作为第一个结果返回给您。(免责声明:我没有投你的反对票)这里有很多开车的反对票+1个问题可以:)
procedure TForm1.ExtractLinks(const URL: String; const StringList: TStringList);
{ Extract "href" attribute from A tags from an URL and add to a stringlist. }
var
i: Integer;
iDoc: IHTMLDocument2;
iHTML: String;
iv: Variant;
iLinks: OleVariant;
iDocURL: String;
iURI: TidURI;
iHref: String;
iIdHTTP: TidHTTP;
iListItem: TListItem;
begin
StringList.Clear;
ListView1.Clear;
iURI := TidURI.Create(URL);
try
iDocURL := 'http://' + iURI.Host;
if iURI.Path <> '/' then
iDocURL := iDocURL + iURI.Path;
finally
iURI.Free;
end;
iDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
try
iDoc.DesignMode := 'on';
while iDoc.ReadyState <> 'complete' do
Application.ProcessMessages;
iv := VarArrayCreate([0, 0], VarVariant);
iIdHTTP := TidHTTP.Create(nil);
try
iHTML := iIdHTTP.Get(URL);
finally
iIdHTTP.Free;
end;
iv[0] := iHTML;
iDoc.Write(PSafeArray(System.TVarData(iv).VArray));
iDoc.DesignMode := 'off';
while iDoc.ReadyState <> 'complete' do
Application.ProcessMessages;
iLinks := iDoc.All.Tags('A');
if iLinks.Length > 0 then
begin
ListView1.Items.BeginUpdate;
for i := 0 to -1 + iLinks.Length do
begin
iHref := iLinks.Item(i).href;
if (iHref[1] = '/') then
iHref := iDocURL + iHref
else if Pos('about:', iHref) = 1 then
iHref := iDocURL + Copy(iHref, 7, Length(iHref));
if (IsValidURL(iHref)) and (IsKnownFormat(iHref)) then
begin
StringList.Add(iHref);
iListItem := ListView1.Items.Add;
iListItem.Caption := iHref;
end;
ListView1.Items.EndUpdate;
end;
end;
finally
iDoc := nil;
end;
end;
procedure TForm1.GetLinks1Click(Sender: TObject);
var
iUrlList: TStringList;
begin
iUrlList := TStringList.Create;
try
{ Get the url list }
ExtractLinks(Url1.Text, iUrlList);
finally
iUrlList.Free;
end;
end;