3

我有一个AsyncTask设置来创建一个AndroidHttpClient和调用Execute,我提供了一个HttpPostBasicHttpContext对象。我这样设置HttpPost

HttpPost myPost = new HttpPost("http://192.168.1.66:8080/login.html");
BasicHttpParams httpParams = new BasicHttpParams();
httpParams.setParameter("cmd", "Login");
httpParams.setParameter("Username", "test");
httpParams.setParameter("Password", "password");
myPost.setParams(httpParams);

当我执行命令时,它检索的是登录页面,而不是登录的结果。在服务器端监控进程后,似乎这是因为HTTP请求到达时没有附加任何参数!那么我错过了什么?

4

4 回答 4

1
List<NameValuePair> nameValuePairs=...;
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

尝试这个。

HttpPost 文档

HTTP POST 方法在 RFC2616 的第 9.5 节中定义:

POST 方法用于请求源服务器接受请求中 包含的实体作为请求行中的请求 URI 标识的资源的新从属...

这个类之所以有 setParams() 是因为它实现了拥有它的HttpMessage。它可能会/可能不会被使用?(不确定,它可能用于其他实现?)但基本上你setEntity(new UrlEncodedFormEntity(nameValuePairs));用来发布它

于 2013-06-17T16:51:15.607 回答
1
            HttpPost post = new HttpPost("http://192.168.1.66:8080/login.html");
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    3);
            nameValuePairs.add(new BasicNameValuePair("cmd", "Login"
                    .getText().toString()));
            nameValuePairs.add(new BasicNameValuePair("Username", "test"
                    .getText().toString()));

            nameValuePairs.add(new BasicNameValuePair("Password", "Password"
                    .getText().toString()));

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
于 2013-06-17T16:51:54.957 回答
0

您需要使用以下命令将httpParams对象实际设置到请求中setEntity

myPost.setEntity(new UrlEncodedFormEntity(httpParams, HTTP.UTF_8));

于 2013-06-17T16:50:45.053 回答
0

setParams()设置管理消息处理的参数。这些消息参数与消息传输的实体无关。

我发现构造多部分实体的最简单方法是使用MultipartEntityBuilder(来自org.apache.http.entity.mime):

  mpe = MultipartEntityBuilder.create();
  mpe.addTextBody("Username", "test");
  mpe.addTextBody("Password", "password");
  mpe.addTextBody("cmd",      "Login");

  req.setEntity(mpe.build());

先前接受的答案不必要地复杂,实际上产生了x-www-form-urlencoded实体,而不是您想要的多部分形式。

于 2014-08-12T02:30:46.290 回答