HTTPClient 버전 4.1.2를 사용하여 기본 인증이 필요한 REST over HTTP API에 액세스하려고했습니다. 전송되는 두 요청이 있다는 것을Basic 인증을 사용하면 HTTPClient가 두 개의 요청을 보냅니 까?
HttpPost request = new HttpPost("http://my/url");
request.addHeader(new BasicHeader("Content-type", "application/atom+xml; type=entry")); // required by vendor
request.setEntity(new StringEntity("My content"));
HttpResponse response = client.execute(request);
내가 Charles Proxy에서 볼 :
DefaultHttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
// Enable HTTP Basic Auth
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(this.username, this.password));
HttpHost proxy = new HttpHost(this.proxyURI.getHost(), this.proxyURI.getPort());
httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy);
나는 POST
요청을 구성
Authorization: Basic ...
헤더가없고
은입니다. 첫 번째 것은 401에서 실패하지만 두 번째는 201로 끝납니다.
왜 이런 일이 일어나는 지 알고 계십니까? 감사!
편집 :
나는 이미 this question 보았다 것을 분명히해야하지만, 당신이 볼 수 있듯이 나는 AuthScope
같은 방법으로 설정하고 내 문제가 해결되지 않았다. 또한 새 요청을 만들 때마다 새로운 HttpClient
을 만들지 만 여러 요청에 동일한 HttpClient
을 사용하더라도 문제가 계속 발생합니다.
편집 2 : 무엇 @LastCoder이 제안 된 것은 할 수있는 방법처럼
그래서 보인다. 다른 질문은 this answer을 참조하십시오. 문제는 HTTP 사양에 대한 지식 부족 때문입니다. 내가하고 싶은 것은 "선매 인증"이라고하며 HttpClient
docs mention it here입니다. 고맙게도, 위의 대답은 훨씬 짧고 깨끗한 방법입니다.
자격 증명을 지정했지만 soap-ui 이벤트를 사용할 때도 똑같은 일이 일어났습니다. – Harindaka
이것이 정상적인 동작인지 궁금합니다. 클라이언트는 인증을 가정하지 않고 http 요청을하고 401을 통해 기본 인증이 필요하다는 메시지를받습니다. 이론적으로 기본 인증은 선점 할 수 있지만 다른 인증 스키마 (예 : 다이제스트)는 추가 협상이 필요합니다. – seand
@seand 여러분은 제가 실제로 그것을 고려했음을 알고 있지만 HTTP 프로토콜이나 그와 유사한 것이 있는지 여부는 알 수 없습니다. – daveslab