我正在尝试访问OriginStamp.org网站以发布文件哈希并获取其时间戳
curl -X GET -H "Content-Type: application/json" -H "Authorization: xxxxxxxxxxxxxxxxxxx" http://api.originstamp.org/api/yyyyyyyyyyy
我使用了多种格式来访问此API,但这似乎是最有希望的,但是没有成功
PROCEDURE TInterNetFm.GetTIMESTAMP;
var
i : integer;
response : string;
JSONToSend : TStringStream;
IndyH : TIdHTTP;
begin
IndyH := TIdHTTP.Create(Application);
JSONToSend := TStringStream.Create('{}');
IndyH.Request.Connection := 'Keep-Alive';
IndyH.Request.CustomHeaders.Clear;
IndyH.Request.CustomHeaders.Values['Content-Type'] := 'application/json';
IndyH.Request.CustomHeaders.Values['Authorization']:='xxxxxxxxxxxxxxx';
IndyH.Request.ContentType := 'application/json';
response:=IdHttp1.post('http://originstamp.org/api/
05c2422f44ddd24ba3f25848773a8fcb48435f8f966381da4732c40a7255780c',
JSONToSend);
JSONToSend.free;
IndyH.free;
end;
这将禁止HTTP / 1.1错误403。
我还尝试了IdHttp1.get
和Delphi REST调试器以及REST上的各种附件。
任何有关我如何解决此问题的建议将不胜感激。
答案 0 :(得分:1)
403错误表示您可能在Authorization
标头中使用了无效的API密钥。另外,请确保将Request.BasicAuthentication
设置为False,以使TIdHTTP
不会尝试发送自己的Authorization
标头。
话说回来,我发现您的代码还有其他几个问题。
如果TIdHTTP.Post()
在失败时引发异常,则您正在泄漏内存。
您正在发送2个Content-Type
标头(一个来自Request.ContentType
,另一个来自CustomerHeaders.Values['Content-Type']
)。仅使用Request.ContentType
。
当您将请求发送到originstamp.org
时,您正在将请求发送到api.originstamp.org
。
您正在创建和配置名为TIdHTTP
的{{1}}对象,但实际上是使用另一个名为IndyH
的对象执行实际的Post()
。
尝试一下:
IdHttp1
function TInterNetFm.GetTIMESTAMP(const AHash: string): string;
var
IndyH : TIdHTTP;
Response : string;
begin
IndyH := TIdHTTP.Create(nil);
try
IndyH.Request.BasicAuthentication := False;
IndyH.Request.CustomHeaders.Values['Authorization'] := 'YOUR_API_KEY';
Response := IndyH.Get('http://api.originstamp.org/api/' + AHash);
finally
IndyH.Free;
end;
// parse Response JSON as needed...
Result := ...;
end;