求高人把这段C#代码改成delphi实现

SVIP_ 2014-01-04 09:22:01
如题, 谢谢了. 对http控件不熟悉...
var strUrl = textBox1.Text;
var req = WebRequest.Create(strUrl) as HttpWebRequest;
//得到域名
string host = req.GetResponse().ResponseUri.Host;
//根据域名得到IP
string getIp = Dns.Resolve(host).AddressList.GetValue(0).ToString();
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SVIP_ 2014-01-04
  • 打赏
  • 举报
回复
得到值了, 谢谢.
sololie 2014-01-04
  • 打赏
  • 举报
回复
取得的地址没错了,113.120.135.232
sololie 2014-01-04
  • 打赏
  • 举报
回复
真是麻烦哦,上面你按着思路改改嘛 如果要处理重定向,给idhtp1.HandleRedirects:=true

uses WinSock, IdHTTP;

function TForm1.GetIPFromUrl(const Url: string): string;
var
  wsdata: TWSAData;
  hostEnt: PHostEnt;
  addr: PChar;
  idhtp1: TIdHTTP;
begin
  Result := '';
  WSAStartup($0101, wsdata);
  idhtp1 := TIdHTTP.Create(nil);
  try
    idhtp1.HandleRedirects := true;  // 启用处理重定向
    idhtp1.Get(Url, nil);
    hostEnt := gethostbyname(PChar(idhtp1.Host));
    if Assigned(hostEnt) then
      if Assigned(hostEnt^.h_addr_list) then
      begin
        addr := hostEnt^.h_addr_list^;
        if Assigned(addr) then
        begin
          Result := Format('%d.%d.%d.%d', [byte(addr[0]),
            byte(addr[1]), byte(addr[2]), byte(addr[3])]);
        end
        else
          Result := '';
      end
      else
        Result := '';
  finally
    WSACleanup;
    idhtp1.Free;
  end
end;

SVIP_ 2014-01-04
  • 打赏
  • 举报
回复
这个是为了解析一个ddns的IP, 比如http://www.hik-online.com/minjuyangtai这个地址, 输入后会跳转成http://113.120.135.232/这个ip, 需要取得返回的这个ip
sololie 2014-01-04
  • 打赏
  • 举报
回复
上面的不要了,改下面的,传入一个URL




uses WinSock, IdHTTP;

function TForm1.GetIPFromUrl(const Url: string): string;
var
wsdata: TWSAData;
hostName: array[0..255] of char;
hostEnt: PHostEnt;
addr: PChar;
idhtp1: TIdHTTP;
begin
Result := '';
WSAStartup($0101, wsdata);
idhtp1 := TIdHTTP.Create(nil);
try
idhtp1.Get(Url, nil);
gethostname(hostName, sizeof(hostName));
StrPCopy(hostName, idhtp1.Host);
hostEnt := gethostbyname(hostName);
if Assigned(hostEnt) then
if Assigned(hostEnt^.h_addr_list) then
begin
addr := hostEnt^.h_addr_list^;
if Assigned(addr) then
begin
Result := Format('%d.%d.%d.%d', [byte(addr[0]),
byte(addr[1]), byte(addr[2]), byte(addr[3])]);
end
else
Result := '';
end
else
Result := '';
finally
WSACleanup;
idhtp1.Free;
end
end;

sololie 2014-01-04
  • 打赏
  • 举报
回复
补上 uses WinSock;
sololie 2014-01-04
  • 打赏
  • 举报
回复
你的目的是不是只要得到一个网站的IP?




function TForm1.GetIPFromHost(const Name: string): string;
var
wsdata: TWSAData;
hostName: array[0..255] of char;
hostEnt: PHostEnt;
addr: PChar;
begin
WSAStartup($0101, wsdata);
try
gethostname(hostName, sizeof(hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname(hostName);
if Assigned(hostEnt) then
if Assigned(hostEnt^.h_addr_list) then
begin
addr := hostEnt^.h_addr_list^;
if Assigned(addr) then
begin
Result := Format('%d.%d.%d.%d', [byte(addr[0]),
byte(addr[1]), byte(addr[2]), byte(addr[3])]);
end
else
Result := '';
end
else
Result := ''
else
begin
Result := '';
end;
finally
WSACleanup;
end
end;

// 调用
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := GetIPFromHost(Edit1.Text);
end;

SVIP_ 2014-01-04
  • 打赏
  • 举报
回复
 lst := TStringList.Create;
    RespData := TStringStream.Create('');
    idhtp1 := TIdHTTP.Create(nil);
    str_1 := 'http://www.hik-online.com/minjuyangtai';
    idhtp1.Post(str_1, RespData);
    idhtp1.Request.Referer := str_1;
    reStr := RespData.DataString ;
这样吗? 好像卡住了
sololie 2014-01-04
  • 打赏
  • 举报
回复
用indy组件的 idhttp

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧