在IE浏览器中输入 http://kh1.google.com/kh?n=404&v=21&t=trstrtrtrrrst ,可以看到一个图,现在我的问题是,如何在DELPHI中用编码的方式得到这幅图并保存?

解决方案 »

  1.   

    connect to kh1.google.com:80
    Connecting...
    Sending...
    'GET /kh?n=404&v=21&t=trstrtrtrrrst HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
    Host: kh1.google.com
    Connection: Keep-Alive
    Cache-Control: no-cache'
    Receiving..........
      

  2.   

    原生socket下载文件.传入参数: GetURLContent('kh1.google.com', 80, ?n=404&v=21&t=trstrtrtrrrst'); 
    返回的是该网页的所有代码,你只要去掉html头剩下的就是你想要的.再贴一次代码: 
    function TSearchThread.GetURLContent(SvrIP: string; SvrPort: integer;
             strURL: string): string;
    var
      m_wsData: TWSAData;
      m_Host: PHostEnt;
      m_addr: sockaddr_in;
      m_Buf : array[0..1023] of char;
      m_iLen: integer;
      m_strTmp: string;
    begin
      Result:= '';  WSAStartUp(MAKEWORD(2, 2), m_wsData);  FSocket:= Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      m_Host:= GetHostByName(PChar(SvrIP));  if m_Host = nil then
        exit;  FillChar(m_addr, SizeOf(m_addr), 0);
      m_addr.sin_family:= AF_INET;
      m_addr.sin_Port  := htons(SvrPort);
      m_addr.sin_addr.S_addr:= PDWORD(PDWORD(m_Host.h_addr)^)^;  Connect(FSocket, m_addr, SizeOf(m_addr));  m_strTmp:= FormatHead('GET', SvrIP, strURL, SvrPort);
      //Send data to server
      Send(FSocket, PChar(m_strTmp)^, Length(m_strTmp), 0);  while true do
      begin
        m_iLen:= Recv(FSocket, m_Buf, SizeOf(m_Buf), 0);    if (m_iLen < 1) then break;    SetString(m_strTmp, m_Buf, m_iLen);
        Result:= Result + m_strTmp;
      end;  CloseSocket(FSocket);
      WSACleanUp;
      FSocket:= 0;  
    end;function TSearchThread.FormatHead(Method, SvrIP: string; strURL: string;
                                      SvrPort: integer): string;
    begin
      Result:= Method + ' /'+ strURL +' HTTP/1.1'#13#10;    //Get Head
      Result:= Result + 'Referer: http://' + SvrIP;  if SvrPort <> 80 then
        Result:= Result + ':' + IntToStr(SvrPort);  Result:= Result + '/' + strURL + #13#10;
      Result:= Result + 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)'#13#10;
      Result:= Result + 'Host: ' + SvrIP;  if SvrPort <> 80 then
        Result:= Result + ':' + IntToStr(SvrPort);  Result:= Result + ''#13#10;
      Result:= Result + 'Connection: Close'#13#10;
      Result:= Result + 'Cache-Control: no-cache'#13#10;  Result:= Result + #13#10;
    end;
      

  3.   

    to etomahawk:你给的代码如何用啊?如何调用所给代码才能达到我的要求啊?你做过实验了吧?恳请再给些详细说明 
      

  4.   

    你想把google的卫片搞下来..其实这是白费力气的。
    一个全国30m精度的片子大概在100G左右(这个是优秀的压缩算法压缩过的,比如mrsid格式等),一般gis系统都是通过金字塔模型提供web服务的,这100个G只是金字塔的底层。如果是城市的话,30m是看不到什么东西的,你至少需要5m的,google的上海应该是0.6m一个像素。还有一些参数你没有的话,拿到这些图片也是无法使用的,比如坐标系,比如卫片的经纬度或者大地坐标的范围...如果通过web就被搞下来,google也不会这么发布了,卫片是受管制的,而且价格很贵。如果你们公司的项目确实需要还是走正规流程,找国内的供应商吧,一个大中型城市精度高的需要几十万到几百万不等,做这类东西是需要砸钱的.