【发布时间】:2012-08-06 12:18:58
【问题描述】:
我正在尝试从 Delphi 中通过其 API 访问 URL Shortener (http://goo.gl/)。 但是,我得到的唯一结果是:HTTP/1.0 400 Bad Request (reason: parseError)
这是我的代码(在具有 Button1、Memo1 和 IdHTTP1 的表单上,其中 IdSSLIOHandlerSocketOpenSSL1 为它的 IOHandler。我从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 消息让我相信 longurl 在发布时的编码可能有问题,但我不知道要更改什么。
我已经为此困惑了很长一段时间,我确信这个错误就在我的眼前——我只是现在没有看到它。 因此,非常感谢任何帮助!
谢谢!
【问题讨论】:
-
毕竟我自己找到了答案,它很好用,毕竟它与 api 密钥无关。不幸的是,由于一些深不可测的原因,我被阻止在这个网站上发布我自己的新代码的答案再过 8 个小时,因为我是新用户,结果不适合评论框。我不知道这个限制意味着什么。好吧,太糟糕了。