java - 在带有身份验证 header 的发布请求中添加正文 android

标签 java android http-post httpresponse

我想使用身份验证 header 将数据发送到服务器,并在正文中包含一些数据。

我尝试使用此代码

HttpPost request;
HttpParams httpParameters;

httpParameters = new BasicHttpParams();

request = new HttpPost(url);

String auth = android.util.Base64.encodeToString((mUserSession.getUserEmail() + ":" + mUserSession.getUserPassword()).getBytes("UTF-8"),android.util.Base64.DEFAULT);

request.addHeader("Authorization", "Basic " + auth);

httpParameters.setParameter("nombre",String.valueOf(params.get("nombre")));
httpParameters.setParameter("annee",String.valueOf(params.get("annee")));
httpParameters.setParameter("photo",String.valueOf(params.get("photo")));
HttpConnectionParams.setSoTimeout(httpParameters, 1000);
DefaultHttpClient client = new DefaultHttpClient(httpParameters);
HttpResponse response = client.execute(request);
String userAuth = EntityUtils.toString(response.getEntity());
int statusCode = response.getStatusLine().getStatusCode();
request = new HttpPost(url);
HttpEntity entity = response.getEntity();
if (entity != null) {
        entity.consumeContent();
}
String cookiesString = null;
List<Cookie> cookies = client.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
Log.e("cookies Length ", "cookies Length = " + cookies.size());
for (int i = 0; i < cookies.size(); i++) {
        cookiesString = cookies.get(i).getValue();
     }
}
Log.e("userAuth", "user auth= " + userAuth);

我收到此异常

10-31 10:36:39.272: D/dalvikvm(6354): GC_FOR_ALLOC freed 4K, 46% free 35542K/65172K, paused 21ms, total 21ms
10-31 10:43:08.222: E/cookies Length(6590): cookies Length = 1
10-31 10:43:08.222: E/userAuth(6590): user auth= <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
10-31 10:43:08.222: E/userAuth(6590): <title>400 Bad Request</title>
10-31 10:43:08.222: E/userAuth(6590): <h1>Bad Request</h1>
10-31 10:43:08.222: E/userAuth(6590): <p>The browser (or proxy) sent a request that this server could not understand.</p>
10-31 10:43:08.222: E/statusCode(6590): statusCode = 400
10-31 10:43:08.222: E/cookiesString(6590): cookies String = eyJfaWQiOiJmNmJhZGJhNTk2ODM4ODJjMDczMWE5ZTZhNWU0M2EyMyJ9.CRXmqA.yJ67mWRqEPQ-aYk7l-7yP_0Gzxg

我需要发送像这样的数据

enter image description here

作为返回,我将得到以下响应

enter image description here

如果你们中有人知道我如何实现这一目标,请帮忙。谢谢

最佳答案

因为您的响应是JSONObject,所以您可以引用我的以下示例代码:

        // HTTP POST
        String url = "http://...";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("key1", "value1");
            jsonObject.put("key2", "value2");
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    // do something...
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // do something...
                }
            }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    final Map<String, String> headers = new HashMap<>();
                    headers.put("Authorization", "Basic 5OoZd9uHbC9nNmIXqJTN_thbQc54kygD3FEqViMclaj8E1FfDKv8p...");
                    return headers;
                }
            };
            requestQueue.add(jsonObjectRequest);
        } catch (JSONException e) {
            e.printStackTrace();
        }

关于Volley,您可以阅读以下内容

Transmitting Network Data Using Volley

希望这有帮助!

关于java - 在带有身份验证 header 的发布请求中添加正文 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33448929/

相关文章:

java - 另一个 zip 重复条目

java - AsyncTask 未运行,logcat 显示为暂停所有线程占用了 : time in ms

javascript - 当异步设置为 true 时,JAVAFX Ajax 调用偶尔无法添加到请求正文

python-3.x - 发布请求错误 : Missing or Invalid Post Body

java - Android (Java) HTTP POST JSON 到服务器,但服务器告诉我没有看到 POST 变量

java - Java ATM 项目中使用 If 语句进行切换

java - 如何使 JTextfield 居中

java - 在 Java REST 中为路径参数添加值?

android - 如何在 IntentService 中运行 Android TTS

java - super 新手问题 : Getting a returned integer value from a Method