Delphi 内から API を介してURL Shortener ( http://goo.gl/ )にアクセスしようとしています。ただし、得られる唯一の結果は次のとおりです。HTTP/1.0 400 Bad Request (reason: parseError)
これが私のコードです( IdSSLIOHandlerSocketOpenSSL1 をIOHandlerとして持つButton1、Memo1、およびIdHTTP1を持つフォーム上にあります。 http://indy.fulgan.com/SSL/から必要な 32 ビット OpenSSL DLL を取得し、. 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;
更新:この例では API キーを省略しました (通常、数回試行するだけでうまく動作するはずです)。ただし、独自のキーで試してみたい場合は、actionurl文字列を
'https://www.googleapis.com/urlshortener/v1/url?key=<yourapikey>';
ParseError メッセージを見ると、ロング URL が投稿されたときにエンコーディングに何か問題があるのではないかと思われますが、何を変更すればよいかわかりません。
私はこれについてかなり長い間混乱してきましたが、間違いは私の目の前にあると確信しています - 私は今それを見ていないだけです. したがって、どんな助けも大歓迎です!
ありがとう!