как установить заголовок авторизации с помощью 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 ответ:
Вот часть моего кода 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();