2015-10-07 3 views
1

Вот команда curl, которую я пытаюсь реплицировать:Ошибка аутентификации HttpUrlConnection

Ниже приведен запрос на завивание.

curl user:[email protected]:8080/foo/bar -d property_one=value_one -d property_two=value_two -d property_three=value_three 

А вот код для HttpURLConnection

URL thisurl = new URL ("http://localhost:8080/foo"); 
    String encoding = Base64Encoder.base64Encode("user:password"); 

    HttpURLConnection connection = (HttpURLConnection) thisurl.openConnection(); 
    connection.setRequestMethod("GET"); 
    connection.setDoOutput(true); 
    connection.addRequestProperty("property_one", "value_one"); 
    connection.addRequestProperty("property_two", "value_two"); 
    connection.addRequestProperty("property_three", "property_three"); 
    connection.setRequestProperty ("Authorization", "Basic " + encoding); 
    InputStream content = (InputStream)connection.getInputStream(); 

На линии connection.getInputStream() я получаю 401 ошибку. Я неправильно делаю проверку подлинности?

+0

Не знаю, имеет ли это значение, но ваш URL-адрес отличается. – Henry

+0

Пробовал ли вы без 'connection.setDoOutput (true);'? Запрос на получение не позволяет выводить. – Henry

+0

1) Запрос cURL является запросом 'POST'. Любой запрос с '-d' будет сделан неявно' POST'. 2) Данные должны быть отправлены в тело запроса как параметры, закодированные в URL-адресе, а не в свойстве запроса. 3) Заголовок 'Content-Type' неявно устанавливается в запросе cURL на' application/x-www-form-urlencoded'. Вы должны сделать то же самое в коде Java. –

ответ

1
connection.setRequestMethod("GET"); 

Здесь вы устанавливаете метод «GET», который так же, как вы использовали с curl.

connection.setDoOutput(true); 

Здесь вы неявно установить его в «POST», что не одно и то же, так что у вас нет никаких оснований ожидать такого же результата.

Не выполняйте эту аутентификацию вручную. Используйте java.net.Authenticator. Вот для чего это.

1

401 error потому что вы не авторизованы. Возможно, вы являетесь неправильно кодирующим заголовком. использовать этот код он работал me.you может получить деталь здесь here

URL url = new URL ("http://localhost:8080/foo"); 
String encoding = org.apache.catalina.util.Base64.encode(credentials.getBytes("UTF-8")); 

URLConnection uc = url.openConnection(); 
uc.setRequestProperty("Authorization", String.format("Basic %s", encoding)); 
Смежные вопросы