当前位置: 首页 > 知识库问答 >
问题:

HTTP post/API请求在bash上从CURL发送时有效,在Apache http

储阳曦
2023-03-14

我正在尝试使用apache http组件与Spotify api接口。我试图发送的请求在#1下面有详细说明。当我使用curl从bash发送这个请求时

卷曲 -H “授权:基本约门” -d grant_type=client_credentials https://accounts.spotify.com/api/token

我拿回了一个像网站描述的令牌

但是,据我所知,以下java代码执行相同的请求,返回400错误

密码

    String encoded = "SOMETOKEN";
    CloseableHttpResponse response = null;
    try {
        CloseableHttpClient client = HttpClients.createDefault();
        URI auth = new URIBuilder()
                .setScheme("https")
                .setHost("accounts.spotify.com")
                .setPath("/api/token")
                .setParameter("grant_type", "client_credentials")
                .build();

        HttpPost post = new HttpPost(auth);
        Header header = new BasicHeader("Authorization", "Basic " + encoded);
        post.setHeader(header);
        try {
            response = client.execute(post);
            response.getEntity().writeTo(System.out);
        }
        finally {
            response.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

错误

{"错误":"server_error","error_description":"意外状态: 400"}

代码打印的URI如下所示

https://accounts.spotify.com/api/token?grant_type=client_credentials

标题是这样的

授权:基本的东西

我没有正确地构造请求吗?还是我遗漏了什么?

共有1个答案

杭令
2023-03-14

对内容类型为< code > application/x-www-form-urlencoded 的正文中的数据使用表单url编码:

CloseableHttpClient client = HttpClients.createDefault();

HttpPost post = new HttpPost("https://accounts.spotify.com/api/token");
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
post.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoded);
StringEntity data = new StringEntity("grant_type=client_credentials");
post.setEntity(data);

HttpResponse response = client.execute(post);
 类似资料:
  • 我如何发送此信息: 到API: 使用cURL,我目前一直在使用: 其中我得到了结果(NGrok): GET/testDir/curlPost。php HTTP/1.1 接受:text/html、Application/xhtml xml、image/jxr、/ 接受语言:en-GB 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537

  • 问题内容: 我想从以下位置检索JSON数据:https : //git.eclipse.org/r/#/c/11376/ 要求网址: 请求方法: 请求标头: 请求有效负载: 我已经尝试过这个答案,但是我得到了。 谁能帮我解决这个问题? 谢谢。 问题答案: 以下代码对我有用。 方法实现:

  • 问题内容: 我查看了用于$ resource的AngularAPI,但没有找到将s发送到RESTful服务的方法。 我知道使用$http方法是可能的,所以,也可以使用吗? 显然,这是的选项。 动作 – {string} –动作的名称。该名称成为资源对象上方法的名称。 方法 – {string} – HTTP请求方法。有效方法为:GET,POST,PUT,DELETE和JSONP params –

  • 我试图通过PHP实现AAA Cooper的SOAP API。当我将XML请求发送到http://wsportal.aaacooper.com:8188/wsportal20/wsGenEst,它通过邮递员,工作正常,但使用CURL时,它不会返回任何内容 我使用直接url(来自wsdl文件),因为他们的wsdl文件似乎已损坏,并且无法使用:http://wsportal.aaacooper.com:

  • 我试图使用eclipse或intellij向api发送get请求,作为使用java/jUnit和放心框架工作的测试的一部分。 每个请求都失败,并显示以下消息 2018年3月13日下午1:29:56组织。阿帕奇。http。impl。客户DefaultHttpClient tryConnect信息:连接到{s}时捕获到I/O异常(java.net.SocketException)- 顺便说一句,我正在

  • 我有一个本地运行的服务器,它有一个内置的rest api。要通过这个api登录,我们需要将用户名,密码和组织作为参数发送到urllocalhost:8090/ehr/api/v1/login通过POST方法和服务器返回一个auth令牌作为响应。当我尝试直接这样做时,无需用户通过以下代码从表单输入: 它工作得非常好,auth token作为json返回,但如果我尝试通过以下代码通过用户表单输入执行相