delphi 通过TRESTClient将图片上传到imgur不起作用

yxyvkwin  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(177)

我想上传一个jpg文件到imgur,并获得jpg的链接。
我有imgur API的客户端ID和客户端密码。
Delphi 代码如下:

procedure TfrmMain.Button6Click(Sender: TObject);
var
  client: TRESTClient;
  request: TRESTRequest;
  response: TCustomRESTResponse;
begin
  client := TRESTClient.Create(nil);
  try
    client.BaseURL := 'https://api.imgur.com/';
    Client.AddParameter('Client ID', '...', TRESTRequestParameterKind.pkHTTPHEADER);
    Client.AddParameter('Client Secret', '...', TRESTRequestParameterKind.pkHTTPHEADER);
    request := TRESTRequest.Create(nil);
    try
      request.Client := client;
      request.Method := rmPOST;
      request.Resource := 'a/C11W7xC';
      request.Accept := 'application/json';
      request.AddParameter('image','D:\linedw.jpg' , pkFile);
      request.Execute;
      response := request.Response;
      if response.Status.Success then
      begin
        mo_response.Lines.add('Success: ' + slinebreak + response.Content);
      end
      else
      begin
          mo_response.Lines.add('Failed ' +  response.StatusText + ': ' + slinebreak + response.Content);
      end;
    finally
      request.Free;
    end;
  finally
   client.Free;
  end;
end;

来自response.Content的错误信息如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>imgur: the simple 404 page</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta name="robots" content="noindex,nofollow" />
    <meta name="keywords" content="images, funny pictures, image host, image upload, image sharing, image resize" />
    <meta name="description" content="Imgur is home to the web's most popular image content, curated in real time by a dedicated community through commenting, voting and sharing." />
    <meta name="copyright" content="Copyright 2014 Imgur, Inc." />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge;" />
    <link rel="stylesheet" type="text/css" href="https://s.imgur.com/min/404.css?1393899213" />
    <!--[if IE 9]><link rel="stylesheet" href="https://s.imgur.com/include/css/ie-sucks.css?0" type="text/css" /><![endif]-->
</head>
<body>
    <div class="nodisplay">
        Imgur is home to the web's most popular image content, curated in real time by a dedicated community through commenting, voting and sharing.
    </div>

    <div id="hallway">
        <div class="container">
            <div id="cat1" class="painting">
                <img src="//s.imgur.com/images/404/cat1weyes.png">
                <div class="eye-container">
                    <div class="eye left">
                        <div class="pupil"></div>
                    </div>
                    <div class="eye right">
                        <div class="pupil"></div>
                    </div>
                </div>
            </div>
            <div id="cat2" class="painting">
                <img src="//s.imgur.com/images/404/cat2weyes.png">
                <div class="eye-container">
                    <div class="eye">
                        <div class="pupil"></div>
                    </div>
                </div>
            </div>
            <div id="giraffe" class="painting">
                <img src="//s.imgur.com/images/404/giraffeweyes.png">
                <div class="eye-container">
                    <div class="eye left">
                        <div class="pupil"></div>
                    </div>
                    <div class="eye right">
                        <div class="pupil"></div>
                    </div>
                </div>
                <img class="monocle" src="//s.imgur.com/images/404/monocle.png" />
            </div>
            <div id="cat3" class="painting">
                <img src="//s.imgur.com/images/404/cat3weyes.png">
                <div class="eye-container">
                    <div class="eye left">
                        <div class="pupil"></div>
                    </div>
                    <div class="eye right">
                        <div class="pupil"></div>
                    </div>
                </div>
            </div>
            <div id="cat4" class="painting">
                <img src="//s.imgur.com/images/404/cat4weyes.png">
                <div class="eye-container">
                    <div class="eye left">
                        <div class="pupil"></div>
                    </div>
                    <div class="eye right">
                        <div class="pupil"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="footer textbox">
        <h1>Zoinks! You've taken a wrong turn.</h1>
        <p>Let's split up, gang. If you're looking for an image, it's probably been deleted or may not have existed at all.</p>
        <p>If you are looking for groovy images, <a href="//imgur.com">visit our gallery!</a></p>
        <a href="//imgur.com" class="footer-logo"><img src="https://s.imgur.com/images/imgurlogo-header.png"></a>
    </div>

    <script type="text/javascript">
        (function(widgetFactory) {
            widgetFactory.mergeConfig('analytics', {
                isAdmin: false
            });
        })(_widgetFactory);
    </script>

    <script type="text/javascript" src="https://s.imgur.com/min/404.js?1393899213"></script>
    <script type="text/javascript">
            var e404 = E404.getInstance();
            e404.generalInit();
    </script>
</body>
</html>

我没有调用REST API的经验。我搜索了 Delphi 演示信息,但没有找到太多。我需要一些关于这方面的指导。
Delphi 10.4 / windows 10

u2nhd7ah

u2nhd7ah1#

您正在尝试将图像上载到服务器上的无效资源a/C11W7xC,这就是为什么您会收到包含HTML内容的HTTP 404 Not Found响应。
根据文档,上载图像的资源是3/upload
我自己没有使用过这个API,但是在我看来,你使用的授权和Imgur的授权不一致。
Imgur的API允许您通过Authorization: ClientID {YOUR_CLIENT_ID} HTTP头匿名上传图像,或使用Authorization: Bearer {YOUR_ACCESS_TOKEN} HTTP头将上传的图像绑定到您的帐户。有关如何获取访问令牌,请参阅授权和OAuth。
请注意,您不应该与所有人共享您的客户端凭据,毕竟它的名称中有secret。我建议您在此时更新您的客户端凭据。

相关问题