Всем привет. как правильно перенести запрос из curl в HttpClient или URL, точнее мне нужно авторизироваться (получить токен)
curl trusted-app:secret@localhost:8080/oauth/token -d "grant_type=password&username=user&password=password"
Через CUrl - все работет получаю токен в ответе, а через HttpClient получаю в ответе
{"timestamp":1518116152990,"status":401,"error":"Unauthorized","message":"Bad credentials","path":"/oauth/token"}
Пробовал вот так, как описано здесь, но вероятно что то напутал.
HttpClient httpClient = HttpClients.createDefault();
HttpUriRequest request1 = RequestBuilder.get("http://localhost:8080/oauth/token")
.addHeader("trusted-app", "secret")
.setEntity(new UrlEncodedFormEntity(Arrays.asList(
new BasicNameValuePair("grant_type", "password"),
new BasicNameValuePair("username", "user"),
new BasicNameValuePair("password", "password")
)))
.build();
HttpResponse response1 = httpClient.execute(request1);
Assert.assertEquals(HttpStatus.OK, response1.getStatusLine().getStatusCode());
Заранее благодарен за ответ!
Когда вы делаете запрос через curl, в нем trusted-app:secret
это не HTTP-заголовок, а логин и пароль см. RFC1738. Заголовок в curl задается, например, так:
curl --header "Host: localhost" 127.0.0.1
То есть, то, что вы делаете на Java, не соответствует тому, что вы делаете c curl.
Правильная конвертация запроса CUrl для авторизации oauth
curl trusted-app:secret@localhost:8080/oauth/token -d "grant_type=password&username=user&password=password"
в HttpClient будет такой
HttpClient httpClient = HttpClients.createDefault();
HttpUriRequest request1 = RequestBuilder.post("http://trusted-app:secret@localhost:8080/oauth/token")
.setEntity(new UrlEncodedFormEntity(Arrays.asList(
new BasicNameValuePair("grant_type", "password"),
new BasicNameValuePair("username", "admin"),
new BasicNameValuePair("password", "password")
)))
.build();
HttpResponse response1 = httpClient.execute(request1);
String theString = convertStreamToString(response1.getEntity().getContent());
System.out.println("Auth-response3: " + theString);
Assert.assertEquals(HttpStatus.OK.value(), response1.getStatusLine().getStatusCode());
Где:
см. спецификацию RFC1738 Также важно помнить - поддерживается только POST-запрос
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
А можно ли сделать интеграцию рекламы в приложение на базе JavaFX ? И вообще в приложение написанное на java для десктопа? Сколько не искал, все...
Мне необходимо импользовать Selenium с proxy для его конфигурации я использую DesiredCapabilities вот такоим образом:
Как исправить код, чтобы корректно отправляло "form-data":