Http Post von mehreren Daten

Fohnbit

Top Contributor
Hallo,

ich lade per http Post Daten auf einen Webserver hoch ... zuerst hatte ich pro CommandString einen eigenen Thread Upload.

Wenn nun der Upload scheitert, werden die Daten wieder in die Queue gelegt und beim nächsten Zyklus abgearbeitet. Da es aber bis zu 10000 Daten sein können, würden 10000 Threads erstellt.

Daher möchte ich nun alle mit einer Connection hochladen ... funktioniert zum Teil.
Der erste http Post wird beim Server übernommen ... die anderen anscheinend nicht (die Daten werden geloggt und sehe immer nur den ersten Upload.

Könnt bitte jemand über den Code blicken und eventuell auf einen Fehler hinweisen?
Mittels getStatusListener. werden die Daten wieder an die Main Klasse zurückgeben und dort in die Queue gelegt.

Danke:

Java:
public class HttpPost extends Thread {

    private final String USER_AGENT = "Mozilla/5.0";
    public GetStatusListener getStatusListener;
    public String url, apiKey, postDataString;
    private LimitedQueue<String> postDataLinkList;

    // public List<ChannelValue> value;

    public HttpPost(String url, LimitedQueue<String> postDataString,
            GetStatusListener getStatusListener, String apiKey) {
        this.getStatusListener = getStatusListener;
        this.url = url;
        this.postDataLinkList = postDataString;
        this.apiKey = apiKey;
        this.start();
    }

    public void run() {

        try {
            URL obj = new URL(url);
            BufferedReader in = null;
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("User-Agent", USER_AGENT);
            System.out.println("Upload data: " + postDataLinkList.size());
            // For POST only - START
            con.setDoOutput(true);
            OutputStream os = con.getOutputStream();
            // System.out.println("lade Daten hoch: " + data.toString());

            Iterator<String> iteratorPostDataString = postDataLinkList.iterator();
            while (iteratorPostDataString.hasNext()) {
                postDataString = iteratorPostDataString.next();
                postDataString = postDataString.split("&apikey")[0];
                postDataString = postDataString + "&apikey=" + apiKey;
                System.out.println("Datenupload: " + postDataString);
                os.write(postDataString.getBytes());
                os.flush();
                // For POST only - END

                int responseCode = con.getResponseCode();
                System.out.println("POST Response Code :: " + responseCode);
                if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
                    getStatusListener.getStatus(responseCode, postDataString);
                    iteratorPostDataString.remove();
                } else if (responseCode == HttpURLConnection.HTTP_OK) { // success
                    in = new BufferedReader(new InputStreamReader(
                            con.getInputStream()));
                    String inputLine;
                    StringBuffer response = new StringBuffer();
                    while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                    }
                    getStatusListener.getStatus(responseCode, postDataString);
                    iteratorPostDataString.remove();
                } else {
                    getStatusListener.getStatus(responseCode, postDataString);
                    iteratorPostDataString.remove();
                }
            }
            if (in != null) {
                in.close();
            }
            if (os != null) {
                os.close();
            }

        } catch (MalformedURLException e) {
            getStatusListener.getStatus(-1, postDataLinkList);
        } catch (IOException e) {
            getStatusListener.getStatus(-1, postDataLinkList);
        }
    }
}
 

BRoll

Bekanntes Mitglied
Ohne groß den Code anzuschauen, verwende doch einen ExecutorService und initialisier ihn mit einem Threadpool von zb. 100. Dann kannst du dort schön alles reinschmeissen, aber es werden nie mehr als 100 Threads gleichzeitig duchgearbeitet. Der Rest wartet dann bis ein Thread frei ist und wird dann ausgeführt.
 

mrBrown

Super-Moderator
Mitarbeiter
JavaDoc sagt:

Each HttpURLConnection instance is used to make a single request

mWn müsstest du für jeden Post ein openConnection machen (und nebenbei dein "extends Thread" umstellen, zB auf den vorgeschlagenen ExecutorService)
 

Fohnbit

Top Contributor
Ich habe es nun mal so erstellt, dass nach dem Upload die Verbindung geschlossen wird und dann wieder neu aufgebaut.

So habe ich einen Thread der alle Daten hochladet ... ich hätte halt gerne die Verbindung offen gelassen ... aber eventuell liegt das am Server der Gegenseite, dass ich zwar Status 200 bekomme (also alles ok) aber die Daten nicht übernommen werden.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich habe es nun mal so erstellt, dass nach dem Upload die Verbindung geschlossen wird und dann wieder neu aufgebaut.

So habe ich einen Thread der alle Daten hochladet ... ich hätte halt gerne die Verbindung offen gelassen ... aber eventuell liegt das am Server der Gegenseite, dass ich zwar Status 200 bekomme (also alles ok) aber die Daten nicht übernommen werden.

Die Verbindung bleibt im Hintergrund offen, da kümmert sich die JVM drum.

Und alle Daten können trotzdem in einem Thread hochgeladen werden - aber "extends Thread" ist bad practice, der Vorschlag mit ExecutorService ist da wesentlich besser ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C HTTP POST-Request Java Basics - Anfänger-Themen 3
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
L Webseite aufrufen (HTTP) Java Basics - Anfänger-Themen 8
P Maven-Dependencies (package org.apache.http.nio does not exist) Java Basics - Anfänger-Themen 6
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
P Http Header, Http Proxy Java Basics - Anfänger-Themen 19
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
K URL ohne http:// Java Basics - Anfänger-Themen 8
F HTTP Get Queue Java Basics - Anfänger-Themen 7
J HTTP Request auf eine PHP Session Java Basics - Anfänger-Themen 1
E HTTP Client - Login durchführen? Java Basics - Anfänger-Themen 4
T Input/Output HTTP 403 aber im Browser gehts Java Basics - Anfänger-Themen 2
G Kraken HTTP Sniffer: ExceptionInInitializerError (Nutzt JNI) Java Basics - Anfänger-Themen 2
O get HTTP Headers Java Basics - Anfänger-Themen 5
L Methodenzerlegung HTTP Java Basics - Anfänger-Themen 4
S HTTP Adresse von offenem Browserfenset einlesen Java Basics - Anfänger-Themen 6
G http-Port beim Apache Tomcat ändern Java Basics - Anfänger-Themen 1
G HTTP Server Java Basics - Anfänger-Themen 2
S HTTP Request Umlaut Problem Java Basics - Anfänger-Themen 3
N Http-Request : Google Suche Java Basics - Anfänger-Themen 6
G http-Request auf Apache Tomcat Java Basics - Anfänger-Themen 13
G HTTP Body? Java Basics - Anfänger-Themen 4
A HTTP-Request Java Basics - Anfänger-Themen 15
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
J Mehrdimensionales Array im Http-Request Java Basics - Anfänger-Themen 5
M Http Redirect Java Basics - Anfänger-Themen 5
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
T mit einem string der form"[url]http://www.*.*/*"[/url] datei Java Basics - Anfänger-Themen 3
J HTTP Request Auslösen Java Basics - Anfänger-Themen 2
P HTTP-Request Parameter übergeben Java Basics - Anfänger-Themen 8
G http client Java Basics - Anfänger-Themen 4
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
B Input/Output HttpURLConnection ( java.net ) Post request Java Basics - Anfänger-Themen 8
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
X Kann man post increment "vollständig schreiben"? Java Basics - Anfänger-Themen 13
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
A ein observer "post"problem Java Basics - Anfänger-Themen 3
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
J Html zugriff - POST Request/Response Java Basics - Anfänger-Themen 4
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
C Versandmarken Post Java Basics - Anfänger-Themen 3
N URLConnection Post Login Java Basics - Anfänger-Themen 8
P Java POST an PHP und lesen Java Basics - Anfänger-Themen 5
G Daten per post Java Basics - Anfänger-Themen 3
hdi Verständnisfrage zu Zuweisung + Post-Inkrement Java Basics - Anfänger-Themen 3
R von Applet zu html/php und post variablen mitschicken Java Basics - Anfänger-Themen 3
G POST-Daten Java Basics - Anfänger-Themen 5
hdi post/pre inkrement oder dekrement Java Basics - Anfänger-Themen 4
G Post-und Präinkrement Schreibweise Java Basics - Anfänger-Themen 4
V Post-Methode und HTTPClient ? Java Basics - Anfänger-Themen 3
O Post senden an php script. Java Basics - Anfänger-Themen 20
G Post-Methode senden Java Basics - Anfänger-Themen 4
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
freudianslip if-Statement mit mehreren Zahlenwerten Java Basics - Anfänger-Themen 4
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
E if-Bedingung mit mehreren Möglichkeiten ? Java Basics - Anfänger-Themen 6
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
U Schleife mit mehreren Bedingungen ? Java Basics - Anfänger-Themen 29
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
B Variable in mehreren Klassen nutzen Java Basics - Anfänger-Themen 4
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
R Eine Datei mit mehreren Zeilen beschreiben Java Basics - Anfänger-Themen 5
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
H Klassen Auf eine Hashtable aus mehreren Klassen zugreifen Java Basics - Anfänger-Themen 12
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F Selben Code in mehreren Projekten Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
G Klassen Problem mit mehreren Klassen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben