POSTメソッド(Apacheからのhttpclient)を使用してWebサイトにログオンします。 私は、HttpClientをHttpPostを実行させ、接続マネージャーがそれを解放させ、次にpdfをダウンロードするためにphp-URLファイルを開くGETメッセージをポストしたいとします。 しかし、私が得るすべてはのhtmlファイル「セッション期限切れ」ページ (のprintln:File: index_GT_neu.html?fehlermeldung=fehler_sessioncheck
)であるJava HTTPクライアントがウェブサイトにログインしてファイルをダウンロードする - セッションの問題!
私はサイトにログオンするためのHttpClientのインスタンスを使用したら、私は開くことができるだろうと考えていましたログオン後にのみ使用可能な別のURL。しかし、明らかに私は間違っていた。 誰かが私にヒントを与えることができますか? ありがとうございます!
// prepare post method
HttpPost post = new HttpPost("http://epaper02.niedersachsen.com/epaper/index_GT_neu.html");
//prepare get method
HttpGet httpget = new HttpGet("http://epaper01.niedersachsen.com/epaper/getfile.php?pdf=0114_GTB_HP_01.pdf&zeitung=GT&ekZeitung=&Y=11&M=01&D=14&C=0");
// add parameters to the post method
List <NameValuePair> parameters = new ArrayList <NameValuePair>();
parameters.add(new BasicNameValuePair("username", "test"));
parameters.add(new BasicNameValuePair("passwort", "test"));
UrlEncodedFormEntity sendentity = new UrlEncodedFormEntity(parameters, HTTP.UTF_8);
post.setEntity(sendentity);
// create the client and execute the post method
HttpClient client = new DefaultHttpClient();
HttpResponse postResponse = client.execute(post);
//Output the Response from the POST
System.out.print(convertInputStreamToString(postResponse.getEntity().getContent()));
//releasing POST
EntityUtils.consume(postResponse.getEntity());
//Execute get
HttpContext context = new BasicHttpContext();
HttpResponse getResponse = client.execute(httpget, context);
System.out.println("Statusline: " + getResponse.getStatusLine());
if (getResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
throw new IOException(getResponse.getStatusLine().toString());
HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);
String currentUrl = URLDecoder.decode(currentReq.getURI().toString(), "UTF-8");
int i = currentUrl.lastIndexOf('/');
String fileName = null;
if (i < 0) {
fileName = currentUrl;
} else {
fileName = currentUrl.substring(i + 1);
}
System.out.println("File: " + fileName);
//Create file
OutputStream os = new FileOutputStream(fileName);
InputStream is = getResponse.getEntity().getContent();
byte[] buf = new byte[4096];
int read;
while ((read = is.read(buf)) != -1) {
os.write(buf, 0, read);
}
os.close();
client.getConnectionManager().shutdown();
ワイヤロギングを有効にして(http://hc.apache.org/httpcomponents-client-ga/logging.html#Wire_Logging)、POSTで受信したものと同じCookieをGETとともに送信していることを確認します。 – fglez
サーバーのログ記録の仕組みは?セッション、クッキー? – Harry