Delphi: Usando o Google URL Shortener com IdHTTP - 400 Bad Request
Estou tentando acessar o encurtador de URL (http://goo.gl/ ) através de sua API de dentro do Delphi. No entanto, o único resultado que obtenho é:HTTP / 1.0 400 Bad Request (razão: parseError)
Aqui está o meu código (em um formulário com umButton1, Memo1 eIdHTTP1 isso temIdSSLIOHandlerSocketOpenSSL1 como seu IOHandler. Eu tenho as DLLs OpenSSL de 32 bits necessáriashttp://indy.fulgan.com/SSL/ e coloque-os no diretório do .exe):
procedure TFrmMain.Button1Click(Sender: TObject);
var html, actionurl: String;
makeshort: TStringList;
begin
try
makeshort := TStringList.Create;
actionurl := 'https://www.googleapis.com/urlshortener/v1/url';
makeshort.Add('{"longUrl": "http://slashdot.org/stories"}');
IdHttp1.Request.ContentType := 'application/json';
//IdHTTP1.Request.ContentEncoding := 'UTF-8'; //Using this gives error 415
html := IdHTTP1.Post(actionurl, makeshort);
memo1.lines.add(idHTTP1.response.ResponseText);
except on e: EIdHTTPProtocolException do
begin
memo1.lines.add(idHTTP1.response.ResponseText);
memo1.lines.add(e.ErrorMessage);
end;
end;
memo1.Lines.add(html);
makeshort.Free;
end;
Atualizar: Eu terminei a minha chave de API neste exemplo (normalmente deve funcionar bem sem uma por algumas tentativas), mas se você quiser tentar com a sua própria, você pode substituir oactionurl corda com'https://www.googleapis.com/urlshortener/v1/url?key=<yourapikey>';
A mensagem ParseError me leva a acreditar que pode haver algo errado com a codificação do longurl quando ele é postado, mas eu não sei o que mudar.
Eu estive pensando sobre isso por um bom tempo agora e tenho certeza que o erro está bem diante dos meus olhos - eu simplesmente não estou vendo isso agora. Qualquer ajuda é, portanto, muito apreciada!
Obrigado!