Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Post请求中添加具有身份验证标头的正文_Java_Android_Http Post_Httpresponse - Fatal编程技术网

Java 在Post请求中添加具有身份验证标头的正文

Java 在Post请求中添加具有身份验证标头的正文,java,android,http-post,httpresponse,Java,Android,Http Post,Httpresponse,我想用身份验证标头将数据发送到服务器,正文中包含一些数据 我尝试使用此代码 HttpPost request; HttpParams httpParameters; httpParameters = new BasicHttpParams(); request = new HttpPost(url); String auth = android.util.Base64.encodeToString((mUserSession.getUserEmail() + ":" + mUserSess

我想用身份验证标头将数据发送到服务器,正文中包含一些数据

我尝试使用此代码

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);
HttpPost请求;
HttpParams httpParameters;
httpParameters=新的BasicHttpParams();
请求=新的HttpPost(url);
字符串auth=android.util.Base64.encodeToString((mUserSession.getUserEmail()+“:”+mUserSession.getUserPassword()).getBytes(“UTF-8”),android.util.Base64.DEFAULT);
request.addHeader(“授权”、“基本”+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客户端=新的DefaultHttpClient(httpParameters);
HttpResponse response=client.execute(请求);
字符串userAuth=EntityUtils.toString(response.getEntity());
int statusCode=response.getStatusLine().getStatusCode();
请求=新的HttpPost(url);
HttpEntity=response.getEntity();
如果(实体!=null){
entity.consumercontent();
}
字符串cookiesString=null;
列表cookies=client.getCookieStore().getCookies();
如果(!cookies.isEmpty()){
Log.e(“cookies长度”、“cookies长度=“+cookies.size());
对于(int i=0;i
我得到了这个例外

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
10-31 10:36:39.272:D/dalvikvm(6354):所有释放4K的GC,46%释放35542K/65172K,暂停21ms,总计21ms
10-31 10:43:08.222:E/cookies长度(6590):cookies长度=1
10-31 10:43:08.222:E/userAuth(6590):user auth=
10-31 10:43:08.222:E/userAuth(6590):400错误请求
10-31 10:43:08.222:E/userAuth(6590):请求错误
10-31 10:43:08.222:E/userAuth(6590):浏览器(或代理)发送了此服务器无法理解的请求

10-31 10:43:08.222:E/状态码(6590):状态码=400 10-31 10:43:08.222:E/cookiesString(6590):cookies String=Eyjfawqioijmnmjhzgjhntk2odm4odjmdczmwe5ztzhnwu0m2eyj9.CRXmqA.yJ67mWRqEPQ-aYk7l-7yP
我需要发送类似于此的数据

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);

作为回报,我将得到以下回复


如果你们中有人知道我如何做到这一点,请帮助我。谢谢

如果您想传递数据,那么您需要使用适用于android的httppost的名称-值对概念。
尝试下面的代码,它可能会帮助您的

// 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", "Hi"));
    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
}
//创建新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://www.yoursite.com/script.php");
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“id”,“12345”);
添加(新的BasicNameValuePair(“stringdata”、“Hi”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}

因为您的响应是一个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();
        }
//HTTP POST
字符串url=”http://...";
RequestQueue RequestQueue=Volley.newRequestQueue(this);
JSONObject JSONObject=新的JSONObject();
试一试{
jsonObject.put(“键1”、“值1”);
jsonObject.put(“键2”、“值2”);
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.POST,url,jsonObject,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
//做点什么。。。
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//做点什么。。。
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
最终映射头=新HashMap();
页眉.put(“授权”、“基本5OoZd9uHbC9nNmIXqJTN_thbQc54kygD3FEqViMclaj8E1FfDKv8p…”);
返回标题;
}
};
add(jsonObjectRequest);
}捕获(JSONException e){
e、 printStackTrace();
}
关于
截击
,您可以阅读以下内容


希望这有帮助

尝试采用以下代码

   HttpUriRequest request = new HttpGet(YOUR_URL); // Or HttpPost(), depends on your needs  
    String credentials = YOUR_USERNAME + ":" + YOUR_PASSWORD;  
    String auth = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);  
    request.addHeader("Authorization", "Basic " + auth);

    HttpClient httpclient = new DefaultHttpClient();  
    httpclient.execute(request);  
    //Handle Exceptions

确保您正在添加Base64.NO_WRAP参数。如果没有它,代码可能无法工作。使用HTTP基本身份验证是不安全的,因此您也可以尝试oAuth。

否它不是名称-值对数据。。。此数据在正文中发送,而不是键值。。。你知道我如何在body@Ichigo Kurosakii中发送数据吗?过一会儿我会尝试一下,然后我会让你知道另一个截击来源是Maann你太棒了。这对我来说是个好办法。说真的,你救了我的命。。虽然我尝试了不同的方法,比如httprequest、httpost和bla-bla。。。。但当我射门时,它就像一个符咒。谢谢@BNK。不客气,很高兴我的回答能帮上忙,很高兴编码:)BNK你能告诉我如何使用带有标题和参数的截击发送删除请求吗?