[英]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.