Ich logge mich auf einer Website mit der POST-Methode (httpclient von Apache). Ich lasse den HttpClient den HttpPost ausführen, lasse ihn vom Verbindungsmanager freigeben und dann möchte ich eine GET-Nachricht posten, die eine PHP-URL-Datei öffnet, um eine PDF herunterzuladen. Aber alles, was ich bekomme, ist die HTML-Datei einer „Sitzung abgelaufen“ Seite (println: File: index_GT_neu.html?fehlermeldung=fehler_sessioncheck
)Java httpclient, um sich in die Website einzuloggen und eine Datei herunterzuladen - Sitzungsprobleme!
Ich dachte, dass ich einmal die Instanz von Httpclient verwendet, bei der Site anmelden, würde ich in der Lage sein, zu öffnen eine andere URL, die nur nach dem Anmelden verfügbar ist. Aber anscheinend lag ich falsch. Jemand könnte mir einen Hinweis geben? Vielen Dank im Voraus!
Dies ist, was mein Haupt aussieht:
// 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();
Aktivieren Sie die Drahtprotokollierung (http://hc.apache.org/httpcomponents-client-ga/logging.html#Wire_Logging) und prüfen Sie, ob Sie mit GET dieselben Cookies senden, die Sie mit POST erhalten. – fglez
Wie protokolliert der Server Benutzer? Sitzungen, Cookies? – Harry