как установить заголовок авторизации с помощью httpURLconnection для android


Я пытаюсь подключиться к своему серверу с помощью обычной аутентификации,но когда я устанавливаю заголовок авторизации, он вызывает getInputStream, чтобы бросить исключение fileNotFound.

Вот соответствующий код:

        URL url = new URL(myurl);
        //set up the connection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);//this is in milliseconds
        conn.setConnectTimeout(15000);//this is in milliseconds
        String authHeader = getAuthHeader(userID,pass);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setRequestProperty("authorization", authHeader);
        //starts the query
        conn.connect();
        int response = conn.getResponseCode();
        is = conn.getInputStream(); //throws the fileNotFound exception

Вот брошенное исключение:

java.io.FileNotFoundException: http://<myIPaddress>/login/
Как ни странно, я обнаружил, что filenotfound исключение только выбрасывается, если я пытаюсь установить свойство request в "authorization" или "Authorization" или любую вариацию этого слова. это Не бросается, если я установил его в "content-type" или "authosodifjsodfjs" (случайная строка), как здесь:
conn.setRequestProperty("content-type",authHeader)//no exception thrown
conn.setRequestProperty("authosodifjsodfjs",authHeader)//no exception thrown

Если я не установлю этот заголовок, я смогу подключиться к серверу с этим кодом и получить соответствующее сообщение об отказе в доступе, которое я ожидаю. Я также могу подключиться к серверу и войти в систему правильно, если я использую модуль "запросы" python, так что это не проблема с сервером.

Итак, мой вопрос заключается в следующем:

1) что, если что-то, я делаю неправильно при настройке запроса собственность как "разрешение"? как правильно установить заголовок auth?

2) если это ошибка с HttpURLConnection, как мне подать отчет об ошибке?

Спасибо.

Edit: было рекомендовано переключиться с:

conn.setRequestProperty("Authorization", authHeader);

Кому:

conn.addRequestProperty("Authorization", authHeader);

Это не решило проблему. Он по-прежнему выбрасывает то же исключение.

Править: все еще не уверен, почему "авторизация" и "авторизация" вызывают fileNotFounExceptions, но использование всех заглавных букв, кажется, работает правильно. Вот блестящий новый рабочий код:

conn.setRequestProperty("AUTHORIZATION",authHeader);

Так что, похоже, это должны быть все шапки. "HTTP_" будет автоматически добавлен в переднюю часть этого заголовка, поэтому заголовок, который сервер увидит, будет "HTTP_AUTHORIZATION", что и должно быть.

1 4

1 ответ:

Вот часть моего кода OAuth, который устанавливает заголовок авторизации:

httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestProperty("User-Agent", "MyAgent");
httpUrlConnection.setConnectTimeout(30000);
httpUrlConnection.setReadTimeout(30000);

String baseAuthStr = APIKEY + ":" + APISECRET;
urlConnection.addRequestProperty("Authorization", "Basic " + baseAuthStr);
urlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

httpUrlConnection.connect();