の送信。資格情報を入力しないと、ログインフォームが表示されます。しかし、私が迷惑な基本認証の資格情報を提供した場合、私は直接目的のコンテンツにアクセスします。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
は今、私の質問:どのように私は、Apacheの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(何か)'、 '輸入org.apache.commons.codec.binary.Base64に依存する必要はありません;' – eis