アクセスするためにユーザー名/パスワードを要求するページからzipファイルをダウンロードしようとしていました(htmlフォームベースの認証)。私はそれにapache httpライブラリを使用しています。以前、私は非常によく似たものに取り組んでいました。そのページでは、ファイルをダウンロードするためにパスワードだけが必要でした。これが私のコードです
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {
public URI lastRedirectedUri;
public boolean isRedirected(HttpRequest request,
HttpResponse response,
HttpContext context) {
boolean isRedirect = false;
try {
isRedirect =
super.isRedirected(request, response,
context);
} catch (org.apache.http.ProtocolException e) {
e.printStackTrace();
}
if (!isRedirect) {
int responseCode =
response.getStatusLine().getStatusCode();
if (responseCode == 301 ||
responseCode == 302) {
System.out.println("the original response code is" + responseCode);
return true;
}
}
return isRedirect;
}
// public URI getLocationURI(HttpResponse response, HttpContext context)
// throws ProtocolException {
//
// lastRedirectedUri = super.getLocationURI(request , response, context);
//
// return lastRedirectedUri;
// }
});
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
// formparams.add(new BasicNameValuePair("password", arg[1]));
formparams.add(new BasicNameValuePair("password", "*****"));
formparams.add(new BasicNameValuePair("email", "****"));
UrlEncodedFormEntity entity1 =
new UrlEncodedFormEntity(formparams, "UTF-8");
HttpPost httppost =
new HttpPost("https://*************************/l/?next=/s/48750/d/");
// new HttpPost(arg[0]);
httppost.setEntity(entity1);
HttpContext localContext = new BasicHttpContext();
CookieStore cookieStore = new BasicCookieStore();
localContext.setAttribute(ClientContextConfigurer.COOKIE_STORE, cookieStore);
HttpResponse response = httpclient.execute(httppost, localContext);
HttpHost target =
(HttpHost)localContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
System.out.println("Final target: " + target);
System.out.println(response.getProtocolVersion());
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());
HttpEntity entity = response.getEntity();
if (entity != null) {
FileOutputStream fos =
new java.io.FileOutputStream("download.zip");
entity.writeTo(fos);
fos.close();
}
コードで提供されている URL を開くと、フォームに email と password という名前の 2 つのパラメーターがあり、それらを formparams (上記のコードでコメントされている値) として指定したことがわかります。どんな助けでも大歓迎です。