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 ';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”就可

在某些网站上,此代码生成图像URL列表,但在某些网站上,它生成“HTTP/1.1 301永久移动”EIdHTTPProtocolException。是否可能从网页url获取Img url列表,或者我是否做了一些错误的事情?

设置
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;