我正在 Android Studio IDE 中使用 JAVA 开发 Android 应用程序。我正在尝试从我的应用程序发送一个 HTTP Post 请求,以从服务器检索作为 XML 的响应。
当我跑步时
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("100.1.1.1");
它毫无例外地工作但是当我在 URL 中使用一个端口时
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("100.1.1.1:8081");
应用程序警告我“不幸的是,应用程序已停止”并退出。
本文中的真实IP地址已被替换为100.1.1.1
我的问题是“为什么它不适用于 URL 中的端口号?”如果有更好的方法通过 URL 和查询字符串从 Web 服务器获取数据,那是什么方法。
以 XML 形式返回数据的 URL 如下:
100.1.1.1:8081/?查找结果&参数1&参数2&参数3
任何帮助将不胜感激。
尝试像下面的代码一样单独添加端口:
private static final int HTTP_PORT = 8081;
private static final String USER_AGENT_NAME = "http.useragent";
private static final String USER_AGENT_VALUE = "Mozilla/5.0 (Linux; U; Android 1.1; en-us;dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2";
protected DefaultHttpClient getHttpClient() throws KeyManagementException, UnrecoverableKeyException,
NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException {
if (httpClient == null) {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), HTTP_PORT));
HttpParams params = new BasicHttpParams();
params.setParameter(USER_AGENT_NAME, USER_AGENT_VALUE);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
httpClient = new DefaultHttpClient(cm, params);
}
return httpClient;
}
在发出 HTTP 请求时,请确保不包含更多端口。
使用 HttpPost,当您将端口号指定为 http URL 的一部分时,它会起作用,如下所示:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://100.1.1.1:8081");
尝试使用
HttpPost(URI)
构造函数代替 HttpPost(String)
。认为它会起作用。