POST via HTTP/HTTPS

  • 7 Antworten
  • Letztes Antwortdatum
S

svend4207

Neues Mitglied
0
Hallo zusammen,

ich möchte in meiner kleinen App einen POST request an eine Website schicken, um mich auf ihr einzuloggen und anschließend die Response auszulesen (+weitere Navigation auf der Seite).

Das Schicken eines GET requests kriege ich hin, und mit POST läuft es auch fehlerfrei durch, das Lesen der Response zeigt aber, dass der Login nicht geklappt hat.

Hier mein Versuch (Auszug):
Code:
protected Void doInBackground(ProgressBar... pbs) {

        try {
            //testweises Senden eines GET requests
            URL url2 = new URL("http://www.mytischtennis.de");
            HttpURLConnection urlConnection2 = (HttpURLConnection) url2.openConnection();
        
          InputStream in=urlConnection2.getInputStream();
          
          DataInputStream ein=new DataInputStream(new BufferedInputStream(in));
     
          test=ein.readLine();
          
          urlConnection2.disconnect();
          

          java.net.CookieManager cm = new java.net.CookieManager();
          java.net.CookieHandler.setDefault(cm);
          
          //Posten von Daten
          URL url = new URL("https://mytischtennis.de/community/login");
         
          HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
          urlConnection.setDoOutput(true);
          urlConnection.setChunkedStreamingMode(0);
          urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
          urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + "UTF-8");


          DataOutputStream out = new DataOutputStream(
                      new BufferedOutputStream(urlConnection.getOutputStream()));
          String urlParameters = "userName=XXXX&userPassWord=XXXX";
          out.writeBytes(urlParameters);
          
          
          
          //Einlesen der Response
          InputStream in2 = new BufferedInputStream(urlConnection.getInputStream());
          
          DataInputStream ein2=new DataInputStream(new BufferedInputStream(in2));
          while((test=ein2.readLine())!=null)
          {
              //Prüfen auf Inhalt ->> Login nicht erfolgreich
          }
          
          urlConnection.disconnect();
        }
        catch(Throwable e)
        {
            e.printStackTrace();
        }
        
        publishProgress();
        
        return null;
    }
Es könnte damit zu tun haben, dass die Seite nach außen nur HTTP hat, der Login mit einer FORM aber via HTTPS geschieht - andererseits funktioniert der direkte Login mit einer Form in einer Java EE-Applikation auch.

Hat jemand Ideen? Was mache ich falsch?

Vielen Danke für jede Hilfe
Svend
 
A

Anzeige

  • Gerade eben
  • Neu
niemand? das ist schade..
 
Naja, die Sache ist ja relativ eindeutig. Dein Code funktioniert generell, aber aus irgendeinem Grunde akzeptiert der Server nicht, was du da schickst. Was da genau ankommt und was nicht passt, musst du dann halt serverseitig prüfen. Da kann man so relativ wenig zu sagen.
 
danke für deinen Kommentar, der mir zu einem neuen Denkanstoß verholfen hat!
 
Ich erwecke diesen Thread mal wieder zum Leben, hänge aktuell beim gleichen Problem. Als was hast du test definiert?
 
test war bei mir einfach ein String.. Was das Problem angeht, habe/hatte ich die falschen Werkzeuge, weswegen ich es dann nicht weiter verfolgt habe..
 
Bei mir funktioniert es so wunderbar:

Code:
private void post(String endpoint, Map<String, String> params) throws IOException
    {
        URL url;
        try {
            url = new URL(endpoint);
        } catch (MalformedURLException e) {
            throw new IllegalArgumentException("invalid url: " + endpoint);
        }
        StringBuilder bodyBuilder = new StringBuilder();
        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        // constructs the POST body using the parameters
        while (iterator.hasNext()) {
            Map.Entry<String, String> param = iterator.next();
            bodyBuilder.append(param.getKey()).append('=')
                    .append(param.getValue());
            if (iterator.hasNext())
            {
                bodyBuilder.append('&');
            }
        }
        String body = bodyBuilder.toString();
        Log.v(TAG, "Posting '" + body + "' to " + url);
        byte[] bytes = body.getBytes();
        HttpURLConnection conn = null;
        try
        {
            Log.e("URL", "> " + url);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setFixedLengthStreamingMode(bytes.length);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded;charset=UTF-8");
            // post the request
            OutputStream out = conn.getOutputStream();
            out.write(bytes);
            out.close();
            // handle the response
            int status = conn.getResponseCode();
            if (status != 200)
            {
                throw new IOException("Post failed with error code " + status);
            }

            InputStream is = null;
            is = conn.getInputStream();
            int ch;
            sb = new StringBuffer();
            while ((ch = is.read()) != -1)
            {
                sb.append((char) ch);
            }

            Log.e("TAG", sb.toString()); // Output der Seite

        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
 
Zurück
Oben Unten