我将数据从android发送到网络,使用httpclient使用像这样的代码
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://host");
List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair("method", "signIn"));
nvps.add(new BasicNameValuePair("email",u));
nvps.add(new BasicNameValuePair("password",pass));
UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps,HTTP.UTF_8);
httppost.setEntity(p_entity);
我有点困惑,如果这段代码将参数放入url作为参数,如url?method=a&email=b&password=c
或将参数放入帖子正文
我应该做的是构建一个http帖子到这个url url?method = a在邮件正文中包含电子邮件和密码参数
答案 0 :(得分:2)
你应该阅读HttpMethods。根据定义,HttpPost传递其身体上的参数,而不是查询字符串中的参数。另一方面,HttpGet应该在查询字符串中传递参数。 此外, 实体 在这里代表身体。
答案 1 :(得分:1)
在同一个请求中混合使用URL参数和发布数据有点令人困惑。这并不是闻所未闻,但我建议您使用其他URL进行登录,例如http://www.yourhost.com/signin和POST用户名和密码。
您还应该考虑在HTTP调用周围使用包装器。与使用OkHttp,Volley或优秀的Android Asynchronous Http Client相比,使用DefaultHttpClient可以编写更多代码。使用Android Async Http Client(具有混合URL和POST参数)的示例:
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("email", "u");
params.put("password", "pass");
client.post("http://host?method=signIn", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
// handle response here
}
});