Android, Java: HTTP POST Request

2022-08-31 23:55:00

我必须向Web服务执行http post请求,以使用用户名和密码对用户进行身份验证。Web服务人员给了我以下信息来构建HTTP Post请求。

POST /login/dologin HTTP/1.1
Host: webservice.companyname.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 48

id=username&num=password&remember=on&output=xml

我将得到的XML响应是

<?xml version="1.0" encoding="ISO-8859-1"?>
<login>
 <message><![CDATA[]]></message>
 <status><![CDATA[true]]></status>
 <Rlo><![CDATA[Username]]></Rlo>
 <Rsc><![CDATA[9L99PK1KGKSkfMbcsxvkF0S0UoldJ0SU]]></Rsc>
 <Rm><![CDATA[b59031b85bb127661105765722cd3531==AO1YjN5QDM5ITM]]></Rm>
 <Rl><![CDATA[username@company.com]]></Rl>
 <uid><![CDATA[3539145]]></uid>
 <Rmu><![CDATA[f8e8917f7964d4cc7c4c4226f060e3ea]]></Rmu>
</login>

这就是我正在做的 HttpPost postRequest = new HttpPost(urlString);如何构造其余参数?


答案 1

下面是之前在 androidsnippets.com 中找到的一个示例(该网站目前不再维护)。

// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

try {
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("id", "12345"));
    nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);

} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
} catch (IOException e) {
    // TODO Auto-generated catch block
}

因此,您可以将参数添加为 BasicNameValuePair

另一种方法是使用 。另请参阅使用 java.net.URLConnection 来触发和处理 HTTP 请求。这实际上是较新的Android版本(Gingerbread+)中的首选方法。另请参阅此博客此开发人员文档和Android的HttpURLConnection javadoc(Http)URLConnection


答案 2

为了@BalusC答案,我会添加如何在字符串中转换响应:

HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
    InputStream instream = entity.getContent();

    String result = RestClient.convertStreamToString(instream);
    Log.i("Read from server", result);
}

下面是 convertStramToString 的一个例子


推荐