Дайджест-аутентификация Apache HttpClient

В основном то, что я должен сделать, должно выполнить дайджест-аутентификацию. Первой вещью, которую я попробовал, является официальный пример, доступный здесь. Но когда я пытаюсь выполнить его (с некоторыми небольшими изменениями, Сообщением вместо Получить метод), я получаю a

org.apache.http.auth.MalformedChallengeException: missing nonce in challange
at org.apache.http.impl.auth.DigestScheme.processChallenge(DigestScheme.java:132)

Когда это перестало работать, я пытался использовать:

DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(new AuthScope(null, -1, null), new UsernamePasswordCredentials("", ""));

HttpPost post = new HttpPost(URI.create("http://"));
        List nvps = new ArrayList();
nvps.add(new BasicNameValuePair("domain", ""));
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

DigestScheme digestAuth = new DigestScheme();
digestAuth.overrideParamter("algorithm", "MD5");
digestAuth.overrideParamter("realm", "http://");
digestAuth.overrideParamter("nonce", Long.toString(new Random().nextLong(), 36));
digestAuth.overrideParamter("qop", "auth");
digestAuth.overrideParamter("nc", "0");
digestAuth.overrideParamter("cnonce", DigestScheme.createCnonce());

Header auth = digestAuth.authenticate(new
      UsernamePasswordCredentials("", ""), post);
System.out.println(auth.getName());
System.out.println(auth.getValue());
post.setHeader(auth);


HttpResponse ret = client.execute(post);
ByteArrayOutputStream v2 = new ByteArrayOutputStream();
ret.getEntity().writeTo(v2);
System.out.println("----------------------------------------");
System.out.println(v2.toString());
System.out.println("----------------------------------------");
System.out.println(ret.getStatusLine().getReasonPhrase());
System.out.println(ret.getStatusLine().getStatusCode());

Сначала я только переопределил "область" и "данный случай" параметры DigestScheme. Но оказалось, что Сценарий PHP, работающий на сервере, требует всех других параметрических усилителей, но неважно если я указываю их или не, DigestScheme не генерирует их в Авторизации RequestPreperty, когда я называю аутентифицировать () метод. И Сценарий PHP возвращает код ответа HTTP 200 с сообщением, что Сценарий PHP требует cnonce, nc и qop параметров.

Я боролся с этим в течение двух дней и никакой удачи. На основе всего я думаю, что причиной проблемы является Сценарий PHP. Это смотрит на меня, что это не отправляет проблему, когда приложение пытается получить доступ к нему несанкционированный.

Какие-либо идеи кто-либо?

Править: Еще одна вещь, я попытался соединиться с ЗАВИХРЕНИЕМ, и это работает.

14
задан Jakub Šturc 7 November 2019 в 09:10
поделиться