Редактировать: Вещь, вызывающая ошибку, была опечаткой в объявлении переменной url
. Приведенный код работает, учитывая правильный ввод. См. Мой ответ для деталей.ProtocolException при использовании getInputStream() в URLConnection
Вопрос: Я работаю над приложением, которое регулярно отправляет запрос GET
на определенный веб-сервер.
Я пробовал и проверял URL
и запрос в браузере, и я получаю информацию в формате XML
, как и ожидалось.
URL/query
выглядит следующим образом: http://foo.bar.com:8080/bla/ha/get_stuff?param1=gargle¶m2=blurp
Я пытаюсь получить необработанное содержимое на устройство (Android таблетке) и вывод его на экран.
Однако при вызове getInputStream()
на моем URLConnection
объекта, я получаю следующее исключение:
java.net.ProtocolException: Неожиданное строку состояния: SSH-2,0-OpenSSH_5.9p1 Debian-5ubuntu1.1
Вызов connect()
на том же объекте не вызывает никаких исключений (однако другие методы, такие как getContent()
, do).
getContentType()
null
.
Я использую AsyncTask
для сбора и отображения данных (отображение работает отлично).
В коде также есть часть Authenticator
, но удаление его не изменилось при выброшенном исключении, поэтому я не думаю, что это проблема.
Это потому, что данные находятся в формате XML
?
Если да, то как еще я должен получить к нему доступ?
Код
class GetPositionTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String url = "http://foo.bar.com/8080/bla/ha/get_stuff";
String charset = "UTF-8";
String param1 = "gargle";
String param2 = "blurp";
try {
String query = String.format("param1=%s¶m2=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("userName", "passWord".toCharArray());
}
});
URLConnection urlConnection = new URL(url + "?" + query).openConnection();
urlConnection.setRequestProperty("Accept-Charset", charset);
InputStream response = urlConnection.getInputStream(); //Commenting this out prevents exception
return "Made it through!"; // Never reaches this
}
catch (IOException e) {
e.printStackTrace();
return "Exception in GetPositionTask";
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(s);
}
}
Примечание: Это похоже на несколько других вопросов, но я не был в состоянии решить мою проблему чтения тех.
Забавных, что владелец сервера только указанный«выше XMP является ответ на запрос HTTP 'GET' [link]". Итак, я подключаюсь к SSH-серверу через HTTP-запрос? – Svj0hn
Конечно, я имел в виду XML, а не XMP. Во всяком случае, если бы вы могли указать мне в правильном направлении, я был бы очень благодарен – Svj0hn