编辑:导致错误的事情是url
变量声明中的拼写错误。给出正确的输入,提供的代码是有效的。有关详细信息,请参阅我的回答。
原始问题:我正在处理定期向某个网络服务器发送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()
)。
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);
}
}
注意:这类似于其他一些问题,但是我无法解决我的问题。
答案 0 :(得分:1)
原因是url
字符串中的一个简单类型,应该是
String url = "http://foo.bar.com:8080/bla/ha/get_stuff";
而不是
String url = "http://foo.bar.com/8080/bla/ha/get_stuff";
修正拼写错误使整个事情成为一种魅力。
有趣的是,当我通过将完整的URL/query
粘贴到URL
构造函数中来规避整个连接和格式化业务时,它仍然有用(即使URLEncoder#encode
调用确实切换了:
)中有一些param2
个字符。
URLConnection urlConnection = new URL("http://foo.bar.com:8080/bla/ha/get_stuff?param1=gurgle¶m2=blurp").openConnection();
(在我的实际情况中,param2
变量包含MAC地址,:
被%xx
类型的内容替换
答案 1 :(得分:0)
您正在连接到SSH服务器,而不是HTTP服务器。
它ng-blur="some task"
上没有发生的原因是connect()
实际上没有连接。如有必要,您提到的其他方法也可以。