2016-11-23 3 views
4

나는 공유 서버에서 데이터를 얻으려고합니다. 다음은 제 코드입니다.안드로이드 NTLM 점점 HTTP/1.1 401 무단으로

DefaultHttpClient httpclient = new DefaultHttpClient(); 

    httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory()); 
    httpclient.getCredentialsProvider().setCredentials(new AuthScope("masconsult.eu", -1), 
      new NTCredentials(username, password, "", "")); 
    HttpGet httpGet = new HttpGet(webserviceUrl); 
    httpGet.addHeader("Content-type", "application/json"); 
    httpGet.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false); 
    // HttpResponse response=""; 
    String responseXML = ""; 
    HttpResponse response = httpclient.execute(httpGet); 
    response.getStatusLine().getReasonPhrase(); 
    responseXML = EntityUtils.toString(response.getEntity()); 
    Toast.makeText(this, responseXML, Toast.LENGTH_LONG).show(); 

응답 HTTP/1.1 401 Unauthorized가 있습니다. 심지어 모든 권한 정보를 추가했습니다. Chrome 브라우저에서 동일한 자격증 명으로 잘 작동합니다. plz 코드의 변경 사항을 제안합니다.

+0

코드를 변경할 필요가 없을 수도 있습니다. IE의 도구> 고급에서 도구> 보안> 로컬 인트라넷 영역> 사이트> 고급에서 "통합 Windows 인증"을 활성화했는지 확인하고 대상 웹 사이트가 나열되어 있는지 확인하십시오. 쿠키를 지우고 IE를 다시 시작하십시오. –

답변

4

이제는 작동합니다. 헤더로 코드를 수정했습니다.

DefaultHttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory()); 
    httpclient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new NTCredentials(username, password, "", "")); 
    HttpGet httpGet = new HttpGet(webserviceUrl); 
    httpGet.addHeader("accept", "application/json;odata=verbose"); 
    httpGet.addHeader("content-Type", "application/json;odata=verbose"); 
    httpGet.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false); 
    HttpResponse response = httpclient.execute(httpGet); 
    System.out.println("Responseeee" + response.getStatusLine()); 
    responseXML = EntityUtils.toString(response.getEntity()); 
    new JSONObject(responseXML).toString(); 
관련 문제