我必须向Web服务发送请求,以使用用户名和密码对用户进行身份验证.
我对以下帖子请求有疑问:
public String postTest(String action,ConnectionParametrData [] parameters) { Uri.Builder builder = new Uri.Builder().scheme(scheme).authority(authority).path(action); uri = builder.build(); BufferedReader in = null; String ans = null; HttpPost request = new HttpPost(uri.toString()); HttpClient defaultClient = new DefaultHttpClient(); try { request.setHeader("Content-Type","application/x-www-form-urlencoded"); request.setEntity(new UrlEncodedFormEntity(getValuePairs(parameters))); HttpResponse response = defaultClient.execute(request); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"UTF-8"),8192); StringBuffer sb = new StringBuffer(""); String line = ""; String newLine = System.getProperty("line.separator"); while((line = in.readLine()) != null) { sb.append(line + newLine); } ans = sb.toString(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ans; }
但这种方法非常有效:
private String makePost(String action,ConnectionParametrData [] parameters) throws IOException { StringBuilder urlBuild = new StringBuilder(); urlBuild.append(scheme).append("://www.").append(authority).append(action); URL url = new URL(urlBuild.toString()); URLConnection urlConnection = url.openConnection(); urlConnection.setDoInput(true); urlConnection.setDoOutput(true); urlConnection.setUseCaches(false); urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); DataOutputStream printout = new DataOutputStream(urlConnection.getOutputStream()); String content = getParameters(parameters); printout.writeBytes(content); printout.flush(); printout.close(); BufferedReader in = null; in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()),8192); StringBuffer sb = new StringBuffer(""); String line = ""; String newLine = System.getProperty("line.separator"); while((line = in.readLine()) != null) { sb.append(line + newLine); } in.close(); return sb.toString(); }
我更喜欢使用HttpClient而不是URLConecction,
有谁知道为什么第一种方法不被批准为POST?
解决方法
在您的第一个代码段中,我没有看到您为登录名和密码设置任何帖子参数的位置.
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair> { new BasicNameValuePair("login","myusername"),new BasicNameValuePair("password","somepassword")}; httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
你可能想看看这个:http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient