【发布时间】:2014-07-06 01:51:49
【问题描述】:
我正在尝试使用 Indy 的 TIdHTTP 组件来使用 last.fm api。当我发送请求时,我一直收到Connection closed gracefully,但没有收到任何数据。但是,当我将相同的 URL 从组件(直接复制到剪贴板)复制到 Chrome 或 Firefox 等网络浏览器时,它可以正常工作。
我正在尝试实现 album.search 调用,并正在尝试 GET 此示例 URL 中的数据:
This request is documented here
我有一个辅助函数来连接常见的 URL 结构:
function TLastFm.ApiUrl(const Method: String): String;
begin
Result:= Format('http://ws.audioscrobbler.com/%s/?format=json&api_key=%s&method=%s',
[FVersion, FKey, Method]); //FVersion = '2.0', FKey = my API key
end;
然后我像这样进行实际调用:
var
S, R: String;
begin
S:= ApiUrl('album.search')+'&album='+Album; //Album = 'believe'
S:= S + '&limit=30&page=1';
Clipboard.AsText:= S; //Used to paste into browser to test
FHTTP.Request.UserAgent:= 'Mozilla/3.0 (compatible; JD Test)';
R:= FHTTP.Get(S); //<-- Connection closed gracefully
// ...
end;
如何使用 Indy 的 TIdHTTP 成功拨打电话?
【问题讨论】:
-
您的程序发送的 HTTP 请求与浏览器发送的请求有何不同?我会使用像 Wireshark 这样的数据包嗅探器来检查。我认为现在可能有更专业的程序。
-
对 Firefox 行为建模的高级检查的一个很好的例子是 Firebug 扩展。
-
Fiddler 很好用,Wireshark 也不错。