Конвертация CURL в URL

172
09 февраля 2018, 20:32

Всем привет. как правильно перенести запрос из 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());

Заранее благодарен за ответ!

Answer 1

Когда вы делаете запрос через curl, в нем trusted-app:secret это не HTTP-заголовок, а логин и пароль см. RFC1738. Заголовок в curl задается, например, так:

curl --header "Host: localhost" 127.0.0.1

То есть, то, что вы делаете на Java, не соответствует тому, что вы делаете c curl.

Answer 2

Правильная конвертация запроса 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());

Где:

  • trust-app - логин
  • secret - пароль

см. спецификацию RFC1738 Также важно помнить - поддерживается только POST-запрос

READ ALSO
Монетизация desktop application

Монетизация desktop application

А можно ли сделать интеграцию рекламы в приложение на базе JavaFX ? И вообще в приложение написанное на java для десктопа? Сколько не искал, все...

203
Как заменить DesiredCapabilities с ChromeOptions в Selenium?

Как заменить DesiredCapabilities с ChromeOptions в Selenium?

Мне необходимо импользовать Selenium с proxy для его конфигурации я использую DesiredCapabilities вот такоим образом:

257
Какие обьекты содержит в себе meta?

Какие обьекты содержит в себе meta?

Доброе УтроИзучаю Модель памяти

213
Как добавить в post запрос form-data?

Как добавить в post запрос form-data?

Как исправить код, чтобы корректно отправляло "form-data":

300