Я пытаюсь возвратить содержание из 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, это хорошо работает. Есть ли некоторая информация заголовка, в которой я нуждаюсь или что-то еще?
вы выполняете запрос POST
, однако ваш браузер будет выполнять запрос GET
; измените свой код delphi, чтобы он также выполнял запрос GET
.
Google может быть заблокирован агентом UserAgent; попробуйте очистить его или изменить, чтобы он соответствовал вашему браузеру.
Вы находитесь за прокси-сервером, которому требуется аутентификация?
У меня больше не установлен Delphi, но я думаю, что компоненты Indy поддерживают аутентификацию прокси, что-то вроде ... (непроверено)
IdHTTP1.ProxyParams.ProxyServer := 'http://proxyaddress';
idHTTP1.ProxyParams.ProxyPort := 8080;
idHTTP.ProxyParams.ProxyUserName := 'name';
idHTTP.ProxyParams.ProxyPassword := 'pwd';
Как сказал 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;