Как я могу выбрать Google статические карты с TIdHTTP?

Я пытаюсь возвратить содержание из maps.google.com из Delphi 2006 с помощью компонента 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.012318' +
        '&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 Запрещенных. Я предполагаю, что это означает, что у меня нет разрешения выполнить этот запрос, но если я копирую URL в свой веб-браузер IE 8, это хорошо работает. Есть ли некоторая информация заголовка, в которой я нуждаюсь или что-то еще?

6
задан Kara 7 December 2013 в 08:01
поделиться

3 ответа

вы выполняете запрос POST , однако ваш браузер будет выполнять запрос GET ; измените свой код delphi, чтобы он также выполнял запрос GET .

Google может быть заблокирован агентом UserAgent; попробуйте очистить его или изменить, чтобы он соответствовал вашему браузеру.

4
ответ дан 17 December 2019 в 04:44
поделиться

Вы находитесь за прокси-сервером, которому требуется аутентификация?

У меня больше не установлен Delphi, но я думаю, что компоненты Indy поддерживают аутентификацию прокси, что-то вроде ... (непроверено)

IdHTTP1.ProxyParams.ProxyServer := 'http://proxyaddress';
idHTTP1.ProxyParams.ProxyPort := 8080;
idHTTP.ProxyParams.ProxyUserName := 'name';
idHTTP.ProxyParams.ProxyPassword := 'pwd';
0
ответ дан 17 December 2019 в 04:44
поделиться

Как сказал glob, вам нужно выполнить Get () вместо Post (), например:

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.012318' +  
      '&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;  
0
ответ дан 17 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: