我如何在java中使用Jetty请求复制这个curl命令?

toiithl6  于 2022-11-13  发布在  Java
关注(0)|答案(1)|浏览(170)

我有一个curl命令

curl -F 'client_id={client id}' \
-F 'client_secret={client secret}' \
-F 'code={temporary token}' \
-F 'grant_type=authorization_code' \
https://cloud.lightspeedapp.com/oauth/access_token.php

取自https://developers.lightspeedhq.com/retail/authentication/access-token/
我尝试用java中的jetty请求来调用这个api。

URIBuilder uriBuilder = new URIBuilder("https://cloud.lightspeedapp.com")
  .setPath("/oauth/access_token.php");

MultiPartContentProvider contentProvider = new MultiPartContentProvider();
contentProvider.addFieldPart("grant_type", new StringContentProvider("authorization_code"), null);
contentProvider.addFieldPart("client_id", new StringContentProvider(lightspeedRId), null);
contentProvider.addFieldPart("client_secret", new StringContentProvider(lightspeedRSecret), null);
contentProvider.addFieldPart("code", new StringContentProvider(temporaryToken), null);
contentProvider.close();

Request request = httpClient.POST(uriBuilder.build())
  .content(contentProvider)
  .header("Content-Type", "multipart/form-data");

但是,它不起作用。我完全不知所措,不知道我需要改变这里。
编辑:我也尝试了一个FormContentProvider,得到了同样的结果。

Fields fields = new Fields();
fields.put("grant_type", "authorization_code");
fields.put("client_id", lightspeedRId);
fields.put("client_secret", lightspeedRSecret);
fields.put("code",temporaryToken);
FormContentProvider contentProvider = new FormContentProvider(fields);
gxwragnw

gxwragnw1#

好吧,事实证明,问题是在请求的末尾设置了“Content-Type”头。

Request request = httpClient.POST(uriBuilder.build())
  .content(contentProvider)
  .header("Content-Type", "multipart/form-data");

没有那个,它就像这样完美地工作。

URIBuilder uriBuilder = new URIBuilder("https://cloud.lightspeedapp.com")
  .setPath("/oauth/access_token.php");

Fields fields = new Fields();
fields.put("grant_type", "authorization_code");
fields.put("client_id", lightspeedRId);
fields.put("client_secret", lightspeedRSecret);
fields.put("code",temporaryToken);
FormContentProvider contentProvider = new FormContentProvider(fields);

Request request = httpClient.POST(uriBuilder.build())
  .content(contentProvider);

我之所以首先设置该头文件,是因为documentation的这一部分。

所以是的,事实证明光速只是有糟糕的文档。让这成为一个警示故事。

相关问题