Код ответа HTTP 401 на HttpUrlConnection.getInputStream - PullRequest
0 голосов
/ 07 ноября 2018

Обратите внимание на следующий фрагмент кода:

    URL url = new URL("https://wfs.geodienste.ch/av/deu?&LAYERS=LCSFC,SOLI,SOSFC,LOCPOS,HADR,LNNA,OSNR,RESF,OSBP,MBSF&FORMAT=image%2Fjpeg&DPI=100&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A2056&BBOX=2637158.3069220297,1236087.7425729688,2639935,1237632&WIDTH=2463&HEIGHT=1369");
    HttpURLConnection uc = (HttpURLConnection) url.openConnection();
    InputStream is = uc.getInputStream();

Для данного URL я получаю исключение 401:

java.io.IOException: Server returned HTTP response code: 401 for URL: https://wfs.geodienste.ch/av/deu?&LAYERS=LCSFC,SOLI,SOSFC,LOCPOS,HADR,LNNA,OSNR,RESF,OSBP,MBSF&FORMAT=image%2Fjpeg&DPI=100&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A2056&BBOX=2637158.3069220297,1236087.7425729688,2639935,1237632&WIDTH=2463&HEIGHT=1369
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1839)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at HTTPTestMain.doit(HTTPTestMain.java:43)
at HTTPTestMain.main(HTTPTestMain.java:28)

Теперь я ожидаю, что URL будет запрашивать некоторые учетные данные при использовании его с браузером. Удивительно, что нет необходимости в учетных данных, и ответ, например, Firefox 200.

Просто для любопытства я добавил следующую строку кода:

uc.setRequestProperty("Authorization", "Basic ");

Все тот же ответ 401.

Можете ли вы сказать мне, что нужно для правильного ответа на Java?

С уважением Klib

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я также смог получить доступ к этой странице из браузера без пароля.

Возможно, что они обрабатывают запросы из веб-браузера не так, как программные запросы; то есть от автоматического скребка. Например, они могут искать заголовок «User-Agent» в ваших запросах.

Но если вы попытаетесь изменить это, чтобы избежать возможных ограничений, они могут решить заблокировать вас, используя другие механизмы.

Я думаю, вам нужно обратиться в службу поддержки сайта: https://geodienste.ch/support. Спросите их, как с этим справиться. Узнайте, нужен ли вам аккаунт и как его получить.

0 голосов
/ 07 ноября 2018

401 означает «Несанкционированный», поэтому с вашими учетными данными должно быть что-то. Вы можете использовать Аутентификатор

enter code here
    Authenticator.setDefault(new Authenticator(){

@Override
    protected PasswordAuthentication getPasswordAuthentication(){          
       return new PasswordAuthentication(login, password.toCharArray());
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...