2010-04-23 12 views
6

मैं TIdHTTP घटक का उपयोग कर डेल्फी 2006 के भीतर maps.google.com से सामग्री वापस करने का प्रयास कर रहा हूं।मैं Google स्थिर मानचित्रों को TIdHTTP के साथ कैसे ला सकता हूं?

मेरे कोड के रूप में इस प्रकार है

procedure TForm1.GetGoogleMap(); 
var 
    t_GetRequest: String; 
    t_Source: TStringList; 
    t_Stream: TMemoryStream; 
begin 
    t_Source := TStringList.Create; 

    try 
    t_Stream := TMemoryStream.Create; 

    try 
     t_GetRequest := 
     'http://maps.google.com/maps/api/staticmap?' + 
     'center=Brooklyn+Bridge,New+York,NY' + 
     '&zoom=14' + 
     '&size=512x512' + 
     '&maptype=roadmap' + 
     '&markers=color:blue|label:S|40.702147,-74.015794' + 
     '&markers=color:green|label:G|40.711614,-74.' + 
     '&markers=color:red|color:red|label:C|40.718217,-73.998284' + 
     '&sensor=false'; 

     IdHTTP1.Post(t_GetRequest, t_Source, t_Stream); 

     t_Stream.SaveToFile('google.html'); 
    finally 
     t_Stream.Free; 
    end; 
    finally 
    t_Source.Free; 
    end; 
end; 

हालांकि मैं प्रतिक्रिया HTTP/1.0 403 निषिद्ध बार आ रही है है। मुझे लगता है कि इसका मतलब है कि मुझे यह अनुरोध करने की अनुमति नहीं है, लेकिन अगर मैं अपने वेब ब्राउजर आईई 8 में यूआरएल कॉपी करता हूं, तो यह ठीक काम करता है। क्या कुछ हेडर जानकारी है जो मुझे चाहिए या कुछ और?

उत्तर

0

क्या आप प्रॉक्सी सर्वर के पीछे हैं जिसके लिए प्रमाणीकरण की आवश्यकता है?

मैं डेल्फी अब और स्थापित किया है नहीं है, लेकिन मुझे लगता है कि इंडी घटकों प्रॉक्सी प्रमाणीकरण का समर्थन है, कुछ की तरह ... (untested)

IdHTTP1.ProxyParams.ProxyServer := 'http://proxyaddress'; 
idHTTP1.ProxyParams.ProxyPort := 8080; 
idHTTP.ProxyParams.ProxyUserName := 'name'; 
idHTTP.ProxyParams.ProxyPassword := 'pwd'; 
4

आप एक POST अनुरोध कर रहे हैं, फिर भी आपके ब्राउज़र होगा GET अनुरोध कर रहे हैं; GET अनुरोध करने के लिए अपना डेल्फी कोड बदलें।

Google UserAgent द्वारा अवरुद्ध हो सकता है; इसे साफ़ करने का प्रयास करें, या अपने ब्राउज़र से मेल खाने के लिए इसे बदल दें।

0

ग्लोब की तरह कहा, तुम उदाहरण के लिए एक पोस्ट() के बजाय) एक प्राप्त (ऐसा करने के लिए, की जरूरत है:

procedure TForm1.GetGoogleMap(); 
var 
    t_GetRequest: String; 
    t_Stream: TMemoryStream; 
begin 
    t_Stream := TMemoryStream.Create; 
    try 
    t_GetRequest := 
     'http://maps.google.com/maps/api/staticmap?' + 
     'center=Brooklyn+Bridge,New+York,NY' + 
     '&zoom=14' + 
     '&size=512x512' + 
     '&maptype=roadmap' + 
     '&markers=color:blue|label:S|40.702147,-74.015794' + 
     '&markers=color:green|label:G|40.711614,-74.' + 
     '&markers=color:red|color:red|label:C|40.718217,-73.998284' + 
     '&sensor=false'; 

    IdHTTP1.Get(t_GetRequest, t_Stream); 

    t_Stream.SaveToFile('google.html'); 
    finally 
    t_Stream.Free; 
    end; 
end; 
1

cloudstrif3, अनुरोध के द्वारा दिए गए मान, एक छवि नहीं एक html पृष्ठ है मैं मेरे ब्लॉग पर इस आलेख को Using Google maps (Static Maps) without TWebBrowser लिखा है, इसलिए आप स्रोत कोड देख सकते हैं।

इस नमूना को जांचें।

var 
    StreamData :TMemoryStream; 
    JPEGImage : TJPEGImage; 
    Url  : string; 
begin 
    Url  :='http://maps.google.com/maps/api/staticmap?' + 
    'center=Brooklyn+Bridge,New+York,NY' + 
    '&zoom=14' + 
    '&size=512x512' + 
    '&maptype=roadmap' + 
    '&markers=color:blue|label:S|40.702147,-74.015794' + 
    '&markers=color:green|label:G|40.711614,-74.' + 
    '&markers=color:red|color:red|label:C|40.718217,-73.998284' + 
    '&format=jpg'; //i add this param to return a jpg image , because the default format used is png. 
    '&sensor=false'; 
    StreamData := TMemoryStream.Create; 
    JPEGImage := TJPEGImage.Create; 
    try 
    try 
    idhttp1.Get(Url, StreamData); //Send the request and get the image 
    StreamData.Seek(0,soFromBeginning); 
    JPEGImage.LoadFromStream(StreamData);//load the image in a Stream 
    ImageMap.Picture.Assign(JPEGImage);//Load the image in a Timage component 
    Except On E : Exception Do 
    MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0); 
    End; 
    finally 
    StreamData.free; 
    JPEGImage.Free; 
    end; 
end; 
0
const 
NONE    = $00; //Zero-value number 
INET_USERAGENT = 'Mozilla/4.0, Indy Library (Windows; en-US)'; 
INET_REDIRECT_MAX = 10; 
var 
    StreamData :TMemoryStream; 
    JPEGImage : TJPEGImage; 
    Url,html  : string; 

begin 
    idhttp1.request.userAgent:=INET_USERAGENT;        //Define user agent 
    idhttp1.redirectMaximum:=INET_REDIRECT_MAX;       //Redirect maxumum 
    idhttp1.handleRedirects:=INET_REDIRECT_MAX<>NONE; 
    Url  :=edit1.Text; 
    StreamData := TMemoryStream.Create; 
    JPEGImage := TJPEGImage.Create; 

    try 
    try 
    html:= idhttp1.Get(Url); //Send the request and get the image 

    idhttp1.Get(Url, StreamData); //Send the request and get the image 
    StreamData.Seek(0,soFromBeginning); 
    memo1.Lines.Text:=html; 
    JPEGImage.LoadFromStream(StreamData);//load the image in a Stream 
    ImageMap.Picture.Assign(JPEGImage);//Load the image in a Timage component 

    Except On E : Exception Do 
    MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0); 
    End; 
    finally 
    StreamData.free; 
    JPEGImage.Free; 
    end; 
end; 
0

मैं पहिया & खरोंच :-)

This question से एक ही बात कोडिंग पुनर्रचना कर रहा हूँ बताते हैं आप 403

मैं कोड & की इस पंक्ति इसके लिए काम किया जोड़ा क्यों मिलता है मैं:
idHttp.request.useragent := 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)';

हाँ, मैं फिर से करता हूँ यह बताएं कि प्रश्न 3 साल पुराना है (और कभी जवाब नहीं दिया गया), लेकिन मैं इसे दूसरों की मदद करने के लिए जोड़ता हूं।

संबंधित मुद्दे