Post Request in Java

B00bietrap

Mitglied
Tudiluuu liebe Mitprogrammierer

Es handelt sich um folgendes.
Ich möchte einen http request mit Java simulieren.
Es handelt sich dabei um einen Request, den ich mit Hilfe von Fiddler2 ausgelesen habe:

Code:
POST /cgi-bin/cgi HTTP/1.1
Host: 192.168.1.10
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: */*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: text/plain; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://192.168.1.10/index.xhtml
Content-Length: 9
Pragma: no-cache
Cache-Control: no-cache

GetImage

Nun würde ich diesen Request gerne simulieren. Dazu verwende ich ne vorlage...
Das Programm sieht momentan Folgendermassen aus:

Java:
package httprequest;

import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import java.io.*;
import java.util.*;
import java.util.zip.GZIPInputStream;


public class WebScrapingTesting {

public static void main(String[] args) throws Exception {
    String target = "192.168.1.10";

    HttpClient client = new DefaultHttpClient();

    HttpPost httpPost = new HttpPost(target);
    BasicNameValuePair[] params = {
            new BasicNameValuePair("jpState", "single"),
            new BasicNameValuePair("commandName", "journeyPlannerCommand"),
            new BasicNameValuePair("from.searchTerm", "Basingstoke"),
            new BasicNameValuePair("to.searchTerm", "Reading"),
            new BasicNameValuePair("timeOfOutwardJourney.arrivalOrDeparture", "DEPART"),
            new BasicNameValuePair("timeOfOutwardJourney.monthDay", "Today"),
            new BasicNameValuePair("timeOfOutwardJourney.hour", "10"),
            new BasicNameValuePair("timeOfOutwardJourney.minute", "15"),
            new BasicNameValuePair("timeOfReturnJourney.arrivalOrDeparture", "DEPART"),
            new BasicNameValuePair("timeOfReturnJourney.monthDay", "Today"),
            new BasicNameValuePair("timeOfReturnJourney.hour", "18"),
            new BasicNameValuePair("timeOfReturnJourney.minute", "15"),
            new BasicNameValuePair("_includeOvertakenTrains", "on"),
            new BasicNameValuePair("viaMode", "VIA"),
            new BasicNameValuePair("via.searchTerm", "Station name / code"),
            new BasicNameValuePair("offSetOption", "0"),
            new BasicNameValuePair("_reduceTransfers", "on"),
            new BasicNameValuePair("operatorMode", "SHOW"),
            new BasicNameValuePair("operator.code", ""),
            new BasicNameValuePair("_lookForSleeper", "on"),
            new BasicNameValuePair("_directTrains", "on")};

    httpPost.setHeader("Host", "192.168.1.10");
    httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
    httpPost.setHeader("Accept", "*/*");
    httpPost.setHeader("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
    httpPost.setHeader("Accept-Encoding", "gzip, deflate");
    httpPost.setHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
    httpPost.setHeader("Connection", "keep-alive");
    httpPost.setHeader("X-Requested-With" , "XMLHttpRequest");
    httpPost.setHeader("Referer", "http://192.168.1.10/index.xhtml");
    httpPost.setHeader("Content-Type", "text/plain; charset=UTF-8");
    httpPost.setHeader("Content-Length", "9");
    httpPost.setHeader("Pragma", "no-cache");
    httpPost.setHeader("Cache-Control", "no-cache");


    UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(Arrays.asList(params));
    urlEncodedFormEntity.setContentEncoding(HTTP.UTF_8);
    httpPost.setEntity(urlEncodedFormEntity);
    HttpResponse response = client.execute(httpPost);

    InputStream input = response.getEntity().getContent();
    GZIPInputStream gzip = new GZIPInputStream(input);
    InputStreamReader isr = new InputStreamReader(gzip);
    BufferedReader br = new BufferedReader(isr);

    String line = null;
    while((line = br.readLine()) != null) {
        System.out.printf("\n%s", line);
    }

    client.getConnectionManager().shutdown();
}
}

Ich habe meine Daten eingetragen... allerdings Weiss ich nicht wozu die oberen Parameter sind und habe diese unverändert gelassen.
Wenn ich nun das Programm im NetBeans starte, erhalte ich eine Fehlermeldung und die Simulation wird abgebrochen.
Kann mir da Jemandweiterhelfen wie ich das Reparieren kann oder obs einen anderen Weg gibt?

Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:182)
        at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:150)
        at httprequest.WebScrapingTesting.main(WebScrapingTesting.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 3 more
Java Result: 1

Danke fürs anschauen.

greez B00bietrap
 

DerEisteeTrinker

Bekanntes Mitglied
google mal nach "Apache Commons Logging" da findest ein Jar, das bindest mit ein und der Fehler sollte nicht mehr auftreten

EDIT: M*** da war wer schneller ;(
 

B00bietrap

Mitglied
Yay, Danke.
Hat soweit geklappt^^
Leider scheint weiter unten im Programm noch ein Bock zu sein :S
Hatte n Target Host Fehler.. der is behoben, hab in der Variable Target die ganze url angegeben

Java:
public static void main(String[] args) throws Exception {
    String target = "http://192.168.1.10/index.xhtml";

Und der Header Content-Lengt sei schon vorhanden... hab den ma auskommentiert um den Fehler zu beheben

Java:
    httpPost.setHeader("Content-Type", "text/plain; charset=UTF-8");
    //httpPost.setHeader("Content-Length", "9");
    httpPost.setHeader("Pragma", "no-cache");

Den nächsten Fehler verstehe leider ich nicht...

Code:
Exception in thread "main" java.io.IOException: Not in GZIP format
        at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:137)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:68)
        at httprequest.WebScrapingTesting.main(WebScrapingTesting.java:68)
Java Result: 1

was bedeutet das?
danke für die schnellen Antworten :)
 
S

SlaterB

Gast
kennst du die Wörter GZip und Format?
verstehst du den Satz 'eine Datei ist im GZip-Format'?
dann müsste doch als nächstes die Fehlermeldung 'Not in GZIP format' auch verständlich sein? ;)

warum das Format nicht vorliegt oder erkannt wird kann Unmengen Grünge haben,
über verschiedene PCs, Netze, Programmiersprachen irgendwelche kompliziert formatierte Dateien auszutauschen ist nunmal nicht gerade Grundlagenarbeit,
wenn es nicht funktioniert.., tja, genaues kann ich eigentlich nicht sagen, mit Glück brauchst du nur ein anderes charset oder irgendwas triviales,
mit Pech viel schlimmeres (worauf ich nie kommen würde)
 

B00bietrap

Mitglied
...
Java:
    InputStream input = response.getEntity().getContent();
    //GZIPInputStream gzip = new GZIPInputStream(input);
    InputStreamReader isr = new InputStreamReader(input);
Nur nich zu weit suchen...
Jetzt muss noch der "RequestBody" GetImage wahrscheinlich irgendie reingehämmert werden den konnt ich noch nirgends unterbringen.
SIeht aber soweit gut aus

Code:
<HTML><HEAD><TITLE>400 Bad Request</TITLE></HEAD>
<BODY><H1>400 Bad Request</H1>
Your client has issued a malformed or illegal request.
</BODY></HTML>BUILD SUCCESSFUL (total time: 2 seconds)
 
N

nillehammer

Gast
<HTML><HEAD><TITLE>400 Bad Request</TITLE></HEAD>
<BODY><H1>400 Bad Request</H1>
Your client has issued a malformed or illegal request.
</BODY></HTML>
Ich würde mal annehmen, dass das am Target Deines Posts liegt. "http://192.168.1.10/index.xhtml" ist im Post-Header als Referrer angebeben. Das sieht für mich nach der Seite aus, in dem das Formular liegt, an das Du den Post senden willst. Diese wird bestimmt ohne Parameter per GET aufgerufen und ist höchstwahrscheinlich nicht das richtige Target für den POST. Falls es tatsächlich ein Formular ist, schau Dir im (HTML-)Quelltext mal das action-Attribut des form-Tags an. Das ist das richtige Target.

Code:
X-Requested-With: XMLHttpRequest
Das sieht nach AJAX aus., könnte also auch eine AJAX-Komponente statt eines Formulars sein.
Falls es irgend eine AJAX-Komponente ist, müsstest Du Dir von der das richtige Target raussuchen.

Außerdem kann es bei AJAX-Requests auch sein, dass die Daten nicht als Post-Parameter sondern als JSON erwartet werden. Hier hilft evtl. ein Blick in die Logs des Servers.
 
N

nillehammer

Gast
Ach ja und zum Thema Gzip:
Code:
Accept-Encoding: gzip, deflate
Mit dem Header sagtst Du dem Server, dass er seinen Response entweder im gzip-Format oder unkomprimiert senden darf. Die Entscheidung, was er davon nutzt, obliegt dem Server. Dieser macht es meist von der Länge des Responses ab. Ab einer gewissen Länge benutzt er gzip. Der von Dir provozierte Response (mit der kurzten Fehlermeldung) war wohl für gzip-Komprimierung zu kurz. Wenn Du Dein Programm aber mal soweit hast, dass Du den richtigen Response zurückbekommst, kann es passieren, dass Du dann wieder einen gzip-Komprimierten Response bekommst. Ich dacht, ich sag's Dir schonmla. Nicht dass Du Dich hinterher wunderst.
 

B00bietrap

Mitglied
Jo, Target hab ich geändert.

Java:
    String target = "http://192.168.1.10/cgi-bin/cgi";

fiddlerr.jpg

Allerdings bleibt nun das Programm stecken :S
Im Quelltext is leider kein action-Attribut zu finden.
Dieser Request würds sonst üblicherweise aus dem JavaScript ausgeführt.

Edit: Danke nillehammer... werd mir das mit dem Gzip ma anschauen.

Danke für die Hilfe schonma
 
N

nillehammer

Gast
Bist Du sicher, dass das das richtige Target ist? Ich kenne keinen Programmierer, der sein cgi-Script einfach cgi nennt.

Im Quelltext is leider kein action-Attribut zu finden. Dieser Request würds sonst üblicherweise aus dem JavaScript ausgeführt.
Dann sag/zeig doch bitte, aufgrund welcher Aktion der POST normalerweise ausgelöst wird. Aufgrund von Einträgen in ein Formular und klicken eines Submit-Buttons, Aufgrund des Klicks auf irgendeine mit JavaScript/AJAX aufgepimpte GUI-Komponente?
 

B00bietrap

Mitglied
Bist Du sicher, dass das das richtige Target ist? Ich kenne keinen Programmierer, der sein cgi-Script einfach cgi nennt.


Dann sag/zeig doch bitte, aufgrund welcher Aktion der POST normalerweise ausgelöst wird. Aufgrund von Einträgen in ein Formular und klicken eines Submit-Buttons, Aufgrund des Klicks auf irgendeine mit JavaScript/AJAX aufgepimpte GUI-Komponente?

Die Post aktion habe ich mit dem Fiddler 2 gefunden.
Die Webseite startet 5 JavaScript Dateien die im ganzen 13 000 Zeilen beinhalten.
Darin ist an einer Stelle
Code:
type: "POST",
url: "/cgi-bin/cgi"
ansonsten sind keine weiteren Hinweise darin zu finden.
An einigen Stellen kommt auch das tolle AJAX vor^^
Daher hab ich mich and den Fiddler gehalten...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Post u Head Request an Server Netzwerkprogrammierung 4
C Android: Json-POST Request zu REST Webservice Netzwerkprogrammierung 2
T HTTP POST Request Netzwerkprogrammierung 3
ARadauer POST Request absetzen.. Netzwerkprogrammierung 3
hdi POST Request (HttpConnection) Netzwerkprogrammierung 6
J 403 error bei POST request Netzwerkprogrammierung 3
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
O HTTP Bilderübergabe per POST Netzwerkprogrammierung 1
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
F HTTP POST - "Already connected" Netzwerkprogrammierung 0
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
R HTTP Post HTML Netzwerkprogrammierung 5
S HTTP Probleme mit POST-Befehl Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
C HTTP POST Connect Netzwerkprogrammierung 9
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
T HttpClient - Senden via Post Netzwerkprogrammierung 12
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
M Http POST liefert kryptischen Content Netzwerkprogrammierung 4
F POST-Daten sende Netzwerkprogrammierung 3
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
J Post-Daten an URL schicken Netzwerkprogrammierung 2
E upload progress bei einem http file post Netzwerkprogrammierung 5
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
E In Webseite einloggen/ GET, POST an PHP-Script übergeben Netzwerkprogrammierung 2
B totale HTTP/1.0 Verwirrung bei POST Netzwerkprogrammierung 5
U Webformular ausfüllen ( Post ) Netzwerkprogrammierung 7
S object via post auf servlet send und weiter bearbeiten Netzwerkprogrammierung 11
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
O Per POST automatisch auf Website einloggen... Netzwerkprogrammierung 9
C POST-Parameter aus HTML-Script lesen Netzwerkprogrammierung 1
Thallius HTTP Kann man den Raw HTTPS Request irgendwie ausgeben lassen? Netzwerkprogrammierung 6
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
J API Aufruf mit GET Request und HMAC Netzwerkprogrammierung 3
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
M http request and response Netzwerkprogrammierung 0
J Json von Html request einlesen Netzwerkprogrammierung 0
T curl request in java umwandeln Netzwerkprogrammierung 4
S PUT-Request Netzwerkprogrammierung 0
P Java Deauth / Deauthentication request Netzwerkprogrammierung 10
R Seltsames Verhalten bei GET Request Netzwerkprogrammierung 7
Y HTTP No request data found Netzwerkprogrammierung 2
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
D OT JavaScript JQuery AJAX Request Netzwerkprogrammierung 2
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
E HTTP Request? Netzwerkprogrammierung 4
L Body eines http Request auslesen Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
D http request Netzwerkprogrammierung 11
J GET Request Netzwerkprogrammierung 1
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
G auf http-request antworten. Netzwerkprogrammierung 3
G JMS Objektzugriff Request Reply erzeugt lediglich Kopie Netzwerkprogrammierung 4
L Java HTTP Request Netzwerkprogrammierung 3
S HTTP Request erstellen Netzwerkprogrammierung 2
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
B lange Strings in http-Request? Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
P Easy Http Request Netzwerkprogrammierung 9
A HTTPS-Request via Proxy mit Konfigurationsskript Netzwerkprogrammierung 3
Z HTTP Request Netzwerkprogrammierung 3
A http request per socket an apache server Netzwerkprogrammierung 5
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
J HTTP Request Netzwerkprogrammierung 2
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
C dhcp request Netzwerkprogrammierung 16
D Bad Request bei Dateiload Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
G Http Request Netzwerkprogrammierung 2
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
V Browsergame mit Java(WebSocketServer) als Backend? Netzwerkprogrammierung 5
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben