IdHTTP如何发送x-www-form-urlencoded正文

问题描述 投票:0回答:1

我已经在PostMan中测试了POST函数,以使用以下主体参数执行POST函数:

enter image description here

enter image description here

这里是此功能的eBay文档:

  HTTP method:   POST
  URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token

  HTTP headers:
    Content-Type = application/x-www-form-urlencoded
    Authorization = Basic <B64-encoded-oauth-credentials>

  Request body:
    grant_type=authorization_code
    code=<authorization-code-value>
    redirect_uri=<RuName-value>

我的第一次尝试如下:

function udxEBayExchangeAuthCodeForUserToken(AAuthCode: String; AIsProduction: Boolean): String;
var
  xRequestBody: TStringStream;
begin
  with objHTTP.Request do begin
    CustomHeaders.Clear;
    ContentType := 'application/x-www-form-urlencoded';
    CustomHeaders.Values['Authorization'] := 'Basic ' + 'V2VpbmluZ0MtV2VpbmluZ0M';
  end;

  xRequestBody := TStringStream.Create('grant_type=' + 'authorization_code' + ','
                                     + 'code=' + 'v%5E1.1%23i%5E1%23f%5E0%23r%5E1%23I%5E3%23p%5E3' + ','
                                     + 'redirect_uri=' + 'myredirecturlnameinsandbox',
                                        TEncoding.UTF8);

  try
    try
      Result := objHTTP.Post('https://api.sandbox.ebay.com/identity/v1/oauth2/token', xRequestBody);
    except
      on E: Exception do
        ShowMessage('Error on request: ' + #13#10 + e.Message);
    end;
  finally
    xRequestBody.Free;
  end;
end;

第二次尝试,使用下面的Body代码

  xRequestBody := TStringStream.Create('grant_type=' + 'authorization_code' + '&'
                                     + 'code=' + AAuthCode + '&'
                                     + 'redirect_uri=' + gsRuName,
                                        TEncoding.UTF8);

两次尝试都给出HTTP / 1.1 400错误请求。

我已经在Stack Overflow中进行了一些搜索,这是最接近的问题。唯一不同的部分是POST的正文。

IdHTTP how to send raw body

任何人都可以告诉我分配POST正文部分的正确方法是什么?谢谢。

delphi http-post idhttp x-www-form-urlencoded
1个回答
1
投票

首选

© www.soinside.com 2019 - 2024. All rights reserved.