【发布时间】:2017-02-20 22:53:35
【问题描述】:
我在网上看了很多例子,但我不明白为什么我的代码不起作用。
我有一个如下所示的网址:
http://www.domain.com/confirm.php?user=USERNAME&id=THEID
confirm.php 是一个页面,它对 MySQL 数据库进行一些检查,然后页面的唯一输出是 0 或 -1(真或假):
<?php
//long code...
if ( ... ) {
echo "0"; // success!
die();
} else {
echo "-1"; // fail!
die();
}
?>
我的 Delphi FireMonkey 应用程序必须打开上面的 URL,传递用户名和 id,然后读取页面的结果。结果只有 -1 或 0。这是代码。
//I have created a subclass of TThread
procedure TRegister.Execute;
var
conn: TIdHTTP;
res: string;
begin
inherited;
Queue(nil,
procedure
begin
ProgressLabel.Text := 'Connecting...';
end
);
//get the result -1 or 0
try
conn := TIdHTTP.Create(nil);
try
res := conn.Get('http://www.domain.com/confirm.php?user='+FUsername+'&id='+FPId);
finally
conn.Free;
end;
except
res := 'error!!';
end;
Queue(nil,
procedure
begin
ProgressLabel.Text := res;
end
);
end;
res 的值始终为error!!,绝不为-1 或0。我的代码哪里出错了?从on E: Exception do 捕获的错误是:
HTTP/1.1 406 不可接受
【问题讨论】:
-
看来
error!!仅在引发异常时发生。您应该阅读异常并让我们知道这实际上引发的确切异常。否则,我们所能做的就是猜测,我们可以做出数百万种可能的猜测。 -
所以您的 except 块应该更像
except on E: Exception do begin res := 'EXCEPTION: ' + E.Messages; end; end;请执行此操作,然后编辑您的问题以提供正在引发的确切异常。 -
另外,如果您在 ARC 下,则无需释放对象
-
@AlbertoMiola 我忘了!你是对的
-
@JerryDodge 所以我应该检查我的 http 标头?