Проблемы с соединением с PHP: withg java.lang.Exception: ошибка HTTP: 401 - PullRequest
0 голосов
/ 15 марта 2012

У меня есть этот код, который должен подключиться к удаленному файлу php и получить строку, представляющую файл XML.Но что-то не так, это дает мне ошибку 401.

Переменная url - это направление php:

String response=getXML("http://ficticiousweb.com/scripts/getMagazinesList.php");

Если я вставлю реальное направление (это фиктивное направление)на веб-браузере, он работает и дает мне XML.

Это мой код:

public String getXML(String url){
    try{
        StringBuilder builder = new StringBuilder();
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        HttpResponse response = httpclient.execute(httpget);
        int statuscode = response.getStatusLine().getStatusCode();
        if(statuscode == 200)
        {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null)  builder.append(line);               
        }
        else throw new Exception("HTTP error: " + String.valueOf(statuscode));
        return builder.toString();
    }catch(Exception e){e.printStackTrace();}
    return null;
}

Что не так с кодом?

спасибо

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Вам необходимо войти на запрошенный сайт, чтобы скачать или получить доступ к XML. Это может быть сделано с помощью аутентифицированной схемы, основанной на том, что поддерживается. Обычно существует 2 типа схем, где они используются. Basic и Digest . Ниже код поможет вам для BASIC AUTH.

HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response;
    String _username = "username";
    String _password = "password";
    try {
         ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
                new org.apache.http.auth.AuthScope(webhostname, webport)),
                new org.apache.http.auth.UsernamePasswordCredentials(_username, _password));

        response = httpclient.execute(new HttpGet(completeurlhere));
        StatusLine statusLine = response.getStatusLine();
        if(statusLine.getStatusCode() == HttpStatus.SC_OK) {
            try {
                InputStream is = response.getEntity().getContent();
                this._data = is;

            } catch(Exception ex) {
                Log.e("DBF Error",ex.toString());
            }                
        } else {
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
    } catch(ClientProtocolException cpe) {
        Log.e("ClientProtocolException @ at FPT",cpe.toString());
    } catch(Exception ex) {
        Log.e("Exception at FETCHPROJECTASK",ex.toString());
    }
0 голосов
/ 15 марта 2012

Ну, 401 означает, что вы не авторизованы для выполнения запроса GET. Вы должны спросить сайт, как аутентифицировать запрос ...

Авторизация происходит через заголовок авторизации в HTTP-запросе. Вы должны изучить это и, возможно, заполнить этот заголовок своими учетными данными ... (если сервер это принимает)

...