인증이 필요한 애매한 웹 서버와 통신해야합니다. 자격 증명을 제공하지 않으면 로그인 양식이 표시됩니다. 그러나 원하지 않는 기본 인증 자격 증명을 제공하면 원하는 콘텐츠로 직접 이동합니다.아파치 HTTP 구성 요소를 이용한 HTTP 인증 : 강제 전송 덤프
wget
이 직접 지원
# this fails and downloads a form:
wget https://weird.egg/data.txt --http-user=me --http-password=shhh
# this works and downloads the document:
wget https://weird.egg/data.txt --http-user=me --http-password=shhh --auth-no-challenge
이제 내 질문 : 어떻게 아파치 HTTP 구성 요소를 사용하여 Java에서 다운로드 할 수 있습니까?
여기까지가 있습니다. (이 또한 장소에서 프록시, 난 wget
에 -Y on
을 사용하고, 나는 일치 https_proxy
환경 변수가 있습니다.) 그러나
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import java.net.URI;
// ...
DefaultHttpClient hc = new DefaultHttpClient();
hc.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(proxy_name, proxy_port));
URI uri = new URI("https://weird.egg/data.txt");
hc..getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME), new UsernamePasswordCredentials("me", "shh"));
hc.execute(new HttpGet(uri)); // etc
, 난 단지 로그인 양식 페이지가 아닌 실제 문서와 끝까지. DefaultHttpClient가 원하지 않는 자격 증명을 보내지 않는다고 의심합니다. 그 방법은 wget
입니다. Java 프로그램이 자격 증명을 보내도록하는 방법이 있습니까?
좋은 아이디어, 고마워. 프레임 워크 솔루션 또한 나에게 적합하지 않았습니다. 수동으로 헤더를 추가했습니다. –
감사합니다. 나는 Maven HTTP Wagon 클라이언트와 동일한 문제점을 가지고 있으며 헤더를 수동으로 추가하여이를 해결했다. –
요즘에는'java.util.Base64.getEncoder(). encodeToString (something)'을 사용할 수 있습니다.'import org.apache.commons.codec.binary.Base64; '에 의존 할 필요가 없습니다. – eis