指定端口号的 HTTP POST 请求

问题描述 投票:0回答:3

我正在 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

任何帮助将不胜感激。

java android http post android-studio
3个回答
0
投票

尝试像下面的代码一样单独添加端口:

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 请求时,请确保不包含更多端口。


0
投票

使用 HttpPost,当您将端口号指定为 http URL 的一部分时,它会起作用,如下所示:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://100.1.1.1:8081");


-1
投票

尝试使用

HttpPost(URI)
构造函数代替
HttpPost(String)
。认为它会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.