Проблема с загрузкой файла с сервера, который использует базовую аутентификацию http из моего кода Java - PullRequest
2 голосов
/ 10 марта 2011

Я написал следующий код Java для загрузки файла с сервера, использующего базовую аутентификацию http.Но я получаю Http 401 ошибку. Однако я могу загрузить файл, нажав URL-адрес непосредственно из браузера.

    OutputStream out = null;
    InputStream in = null;
    URLConnection conn = null;

    try {
                    // Get the URL
                        URL url = new URL("http://username:password@somehost/protected-area/somefile.doc");
                    // Open an output stream for the destination file locally
                    out = new BufferedOutputStream(new FileOutputStream("file.doc"));
                    conn = url.openConnection();
                    in = conn.getInputStream();

                    // Get the data
                    byte[] buffer = new byte[1024];
                    int numRead;
                    while ((numRead = in.read(buffer)) != -1) {
                        out.write(buffer, 0, numRead);
                    }            

     } catch (Exception exception) {
                    exception.printStackTrace();
     } 

Но я получаю следующее исключение при запуске программы:

java.io.IOException: Server returned HTTP response code: 401 for URL: http://username:password@somehost/protected-area/somefile.doc
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
        at TestDownload.main(TestDownload.java:17)

Однако я могу загрузить файл, нажав URL-адрес http://username:password@somehost/protected-area/somefile.doc, непосредственно из браузера.

Что может быть причиной этой проблемы, и любой способисправить это?

Пожалуйста, помогите Спасибо.

1 Ответ

2 голосов
/ 10 марта 2011

Я использую org.apache.http:

private StringBuffer readFromServer(String url) {
    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() {
        public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
            AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);

            if (authState.getAuthScheme() == null) {
                Credentials credentials = new UsernamePasswordCredentials(
                        Constants.SERVER_USERNAME,
                        Constants.SERVER_PASSWORD);

                authState.setAuthScheme(new BasicScheme());
                authState.setAuthScope(AuthScope.ANY);
                authState.setCredentials(credentials);
            }
        }    
    };

    httpclient.addRequestInterceptor(preemptiveAuth, 0);

    HttpGet httpget = new HttpGet(url);
    HttpResponse response;

    InputStream instream = null;
    StringBuffer result = new StringBuffer();

    try {
        response = httpclient.execute(httpget);

и т.д ...

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