Delphi: Używanie Google URL Shortener z IdHTTP - 400 Bad Request
Próbuję uzyskać dostęp do adresu URL Shortener (http://goo.gl/ ) za pośrednictwem interfejsu API z poziomu Delphi. Jednak jedynym wynikiem, jaki otrzymuję, jest:HTTP / 1.0 400 Bad Request (powód: parseError)
Oto mój kod (na formularzu za pomocąPrzycisk 1, Memo1 iIdHTTP1 który maIdSSLIOHandlerSocketOpenSSL1 jak jego IOHandler. Mam potrzebne 32-bitowe biblioteki DLL OpenSSLhttp://indy.fulgan.com/SSL/ i umieść je w katalogu .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;
Aktualizacja: W tym przykładzie zrezygnowałem z klucza API (zwykle powinien on działać bez jednego na kilka prób), ale jeśli chcesz go wypróbować z własnym, możesz zastąpićactionurl ciąg z'https://www.googleapis.com/urlshortener/v1/url?key=<yourapikey>';
Komunikat ParseError prowadzi mnie do przekonania, że podczas kodowania longurla może być coś nie tak, ale nie wiedziałbym, co zmienić.
Od dłuższego czasu nad tym zastanawiam się i jestem pewien, że błąd jest tuż przed moimi oczami - po prostu nie widzę tego teraz. Każda pomoc jest więc bardzo ceniona!
Dzięki!