Проблема отправки заголовков HTTP в Java - PullRequest
2 голосов
/ 23 ноября 2010

Правильно ли я отправляю HTTPPost?Я проверяю свой encodedAuthString на моем веб-сервере и могу убедиться, что строка правильная.Не уверен, почему я не могу аутентифицироваться.

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

ОБНОВЛЕНИЕ:

Когда я жестко кодирую закодированную строку, все в порядке.* Когда я использую кодировщик Base64, я получаю те же результаты, что и закодированная строка, но сервер возвращает 401.

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

Вы не устанавливаете никаких заголовков в этом коде. Используйте setHeader() для установки заголовков. Это также описано в документации для HttpClient, как и информация из вашего предыдущего вопроса .

Вот пример проекта , который устанавливает заголовок авторизации. Обратите внимание, что в нем используется отдельный кодер Base64, поскольку встроенный кодер появился только в Android 2.2, IIRC.

0 голосов
/ 21 ноября 2013

Я видел дополнительные \n в строке, поэтому вместо использования параметра по умолчанию я использовал no_wrap параметр, подобный следующему:

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

и у меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...