开发者

Problem sending HTTP headers in Java

开发者 https://www.devze.com 2023-01-26 16:13 出处:网络
Am I correctly sending an HTTPPost? I am checking my encodedAuthString against my web开发者_如何学Pythonserver and can verify the string is correct. Not sure why I am unable to authenticate.

Am I correctly sending an HTTPPost? I am checking my encodedAuthString against my web开发者_如何学Pythonserver and can verify the string is correct. Not sure why I am unable to authenticate.

public JSONObject connect(String url) {
            HttpClient httpclient = new DefaultHttpClient();

            // Prepare a request object
            HttpPost httppost = new HttpPost(url);

            String authString = usernameEditText.getText().toString() + ":" + passwordEditText.getText().toString();
            String encodedAuthString = Base64.encodeToString(authString.getBytes(),Base64.DEFAULT);
            String finalAuthString = "Basic " + encodedAuthString;

            // Execute the request
            HttpResponse response;
            try {  
                httppost.addHeader("Authorization", finalAuthString);

                response = httpclient.execute(httppost);
                // Examine the response status
                Log.i("Praeda", response.getStatusLine().toString());

                // Get hold of the response entity
                HttpEntity entity = response.getEntity();

                if (entity != null) {

                    // A Simple JSON Response Read
                    InputStream instream = entity.getContent();
                    String result = convertStreamToString(instream);

                    // A Simple JSONObject Creation
                    JSONObject json = new JSONObject(result);

                    // Closing the input stream will trigger connection release
                    instream.close();

                    return json;
                }

            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected JSONObject doInBackground(String... urls) {
            return connect(urls[0]);
        }

        @Override
        protected void onPostExecute(JSONObject json) {
            String authorized = "200";
            String unauthorized = "401";
            String notfound = "404";
            String status = new String();

            try {
                // Get the messages array
                JSONObject response = json.getJSONObject("response");
                status = response.getString("status");

                if(status.equals(authorized))
                    Toast.makeText(getApplicationContext(), "Authorized",Toast.LENGTH_SHORT).show();
                else if (status.equals(unauthorized))
                    Toast.makeText(getApplicationContext(), "Unauthorized",Toast.LENGTH_SHORT).show();
                else if(status.equals(notfound))
                    Toast.makeText(getApplicationContext(), "Not found",Toast.LENGTH_SHORT).show();

            } catch (JSONException e) {
                System.out.println(e);
            } catch (NullPointerException e) {
                System.out.println(e);
            }
        }
    }

UPDATE:

When I hard-code the encoded string, everything is fine.

When I use the Base64 encoder I get the same results as the encoded string, but the server returns a 401.


You are not setting any headers in this code. Use setHeader() to set headers. This too is covered in the documentation for HttpClient, as was the information from your previous question.

Here is a sample project that sets the Authorization header. Note that it uses a separate Base64 encoder, since the built-in one only showed up with Android 2.2, IIRC.


I saw extra \n in the string, so instead of using default option, I used no_wrap option like this:

Base64.encodeToString(authordata.getBytes(), Base64.NO_WRAP);

and it worked for me.

0

精彩评论

暂无评论...
验证码 换一张
取 消