繁体   English   中英

oAuth 令牌与 Java Apache http 客户端

[英]oAuth Token with Java Apache http Client

我正在尝试从 Java 客户端(Apache HTTP 客户端)获取 oAuth 令牌。 不幸的是,我对错误消息知之甚少。 我不是 Java 专业人士,但我不知道这是我的错误还是与基础设施有关,例如防火墙或类似的东西。 代码如下:

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class App {

    public static void main(String[] args) throws ClientProtocolException, IOException {            
        final HttpUriRequest request = RequestBuilder.get()
                .setUri("SOME_URL")
                .setHeader("Content-Type", "application/x-www-form-urlencoded")
                .setHeader("Accept", "application/json")
                .setHeader("Authorization", "Basic ZXA6ZXAyMDE2")
                .addParameter("username", "USERNAME")
                .addParameter("password", "SOMEPASSWORD")
                .addParameter("grant_type", "password")
                .addParameter("scope", "read write")
                .build();
        final HttpClient client = HttpClientBuilder.create().build();
        final HttpResponse response = client.execute(request);
        final HttpEntity entity = response.getEntity();


        System.out.println(EntityUtils.toString(entity));


    }
}

**编辑:**错误信息如下:

Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: I/O exception (java.net.SocketException) caught when processing request to {s}->https://someurl: Invalid argument: create
Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: Retrying request to {s}->someurl
Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: I/O exception (java.net.SocketException) caught when processing request to {s}->someurl: Invalid argument: create
Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: Retrying request to {s}->someurl
Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: I/O exception (java.net.SocketException) caught when processing request to {s}->someurl: Invalid argument: create
Dez 06, 2017 12:24:45 PM org.apache.http.impl.execchain.RetryExec execute
INFORMATION: Retrying request to {s}->someurl
Exception in thread "main" java.net.SocketException: Invalid argument: create
    at java.net.Socket.createImpl(Socket.java:460)
    at java.net.Socket.getImpl(Socket.java:520)
    at java.net.Socket.setSoTimeout(Socket.java:1141)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:120)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at App.main(App.java:28)

这是我使用的 curl 命令:

curl -H "Authorization: Basic SOME_PW" --form "grant_type=password" --form "username=USERNAME" --form "password=PASSWORD" HERE_COMES_THE_URL --insecure

使用这个 curl 命令,我得到了一个工作令牌。

问题是,正如用户 JEY 所说:我使用的是 GET 请求而不是 Post 请求。 要获取令牌,您必须使用 Post 请求。 您所做的是发送您的凭据并接收令牌。 使用 REST 时,您可能必须在将凭据发送到 Authenticate 时使用 Post 请求。 就我而言,我使用有效载荷作为参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM