POST aus JavaApplet

Status
Nicht offen für weitere Antworten.

overmoon

Mitglied
Huhu!

Ich möchte aus einem JavaApplet eine WebSeite anwählen. Soweit kein Problem.
Jedoch möchte ich der Seite via POST Daten übergeben. ???:L

Die Zielseite ist nämlich in PHP und könnte dann mit den übergebenen Datan arbeiten,
u.a. entprechend eine Datei auf dem Server modifizieren.

Nur wie sende ich vom Applet aus den POST ? :###

Gruß,
overmoon
 

Kerberus

Bekanntes Mitglied
Konnte das schon jemand realisieren?
Habe ein Gästebuch in Java geschrieben und möchte nun die Daten via POST übertragen an ein PHP-Skript mit dem Namen anfrage.php. Hbe das folgendermassen versucht:

Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;

public class START_GBOOK extends Applet implements Sender {
 public void init() {
  gbook gb = new gbook(this);
  add(gb);
 }

 public void senden(String s) {
  HttpURLConnection connection = null;
  URL url;

  try {
   URL temp_url = getCodeBase();
   String string_url = temp_url.toString()+"anfrage.php";
   url = new URL(string_url);

   connection = (HttpURLConnection) url.openConnection();
   connection.setRequestMethod("POST");
   connection.setDoOutput(true);

   PrintStream out = new PrintStream(connection.getOutputStream());
   out.println(s);
   out.flush();
   out.close();


  } catch(MalformedURLException murle) {
   
  } catch(IOException ioe) {
  }
 }
}

Allerdings scheint die Methode senden() nicht zu funktionieren. Was mache ich falsch?
Danke für Antwort und wünsche ein schönes Wochenende.
Sir MacKerberus
 

foobar

Top Contributor
Allerdings scheint die Methode senden() nicht zu funktionieren. Was mache ich falsch?
Was heißt funktioniert nicht? Exception?


Code:
 String string_url = temp_url.toString()+"anfrage.php";
Erwartet das php-Script noch irgenwelche Parameter?
Versuch es mal so:

Code:
URL = url = new URL("http", "localhost", 80, "anfrage.php");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");


Code:
} catch(MalformedURLException murle) {
Das ist ja grauenhaft, lass dir zumindest mal den Stacktrace ausgeben.
 

Kerberus

Bekanntes Mitglied
Hm. Funktioniert immer noch nicht.
Mir ist aber was eingefallen:
Code:
$var = $HTTP_POST_VARS[""];
So frage ich am Angang meines Skriptes die Variable ab. Normalerweise müsste man ja den Namen des Feldes aus welchem die Daten stammen angeben. Wenn ich über den PrintStream was sende, wie weiss ich wie das nicht-existente Feld heisst?
 

dronus

Mitglied
oha...

Das Problem hatte ich auch mal.
Aaaaaaaallsoo:
Was du in den Stream schreibst, sind einfach Eingaben an den Server. Z.b. würdest du "GET /index.htm HTTP ... usw. senden, um eine Seite abzurufen (nur das scheint java ja schon für dich zumachen, da du die METHOD wählst.

Um Formularfelder zu senden, musst du das gesamte POST-Formular "nachmachen", was ein Browser auch senden würde, und das ist nicht ohne.
Ich habe das hinbekommen, aber für den eigentlich aufwendigeren Fall, eine Datei auf den Server hochzuladen. Wie man einfache Formularfelder mit FELDNAME=FELDINHALT POSTet weiss ich leider nicht, sorry.
Trotzdem kannst du dir mal den Code ansehen, da siehst du, wie der Formular-Header prinzipiell aufgebaut ist, und im Netz nach Dokus über das POST-Format suchen.

Viel Glück wünsch ich dir!
mfg
Paul


EDIT: Der Code unten scheint das benötigte aber bereits zu tun, und zwar in der Zeile 25:
printer.print("Content-Disposition: ...
da siehst du, wie die felder "name" und "filename" belegt werden. die kommen in PHP auch an. Da kannst du deine eigenen Felder reinschreiben denke ich.



Dieser Code erzeugt einen Stream, in den man schreiben kann, durch close(); wird dieser dann auf den Server hochgeladen, und man kann in PHP die Datei abholen. Falls du dazu Fragen hast, her damit.

Code:
import java.io.*;
import java.net.*;


class Poster
{
	HttpURLConnection  con;
	OutputStream out;
	PrintStream printer;
	
	Poster(String address)
	{
		try{
			URL url=new URL(address);
			con=(HttpURLConnection)url.openConnection();
			con.setRequestProperty("Content-Type", "multipart/form-data; boundary=---------------------------255141413922088");
			con.setRequestMethod("POST");
			con.setDoInput(true);
		   con.setDoOutput(true);
  		   con.setUseCaches(false);
			out=con.getOutputStream();
			printer = new PrintStream(out);				 
			printer.print("-----------------------------255141413922088\n");
			printer.print("Content-Disposition: form-data; name=\"bild\"; filename=\"userfile\"\n\n");
			printer.flush();

		}
		catch(Exception ex){ex.printStackTrace();}
	}

	OutputStream stream()
	{
		return out;
	}

	void close()
	{
		try{		
			out.flush();
			printer.print("\n\n-----------------------------255141413922088--\n");
			printer.close();
			out.flush();
			BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream()));
			String s;
			while ((s=reader.readLine())!=null)
				System.out.println(s);
		}
		catch(Exception ex){System.out.println(ex);}			
	}
}
 

TSlaughter

Mitglied
Hallo an Alle!!!

Ich hab ein Problem was hierzu ganz gut passt:

Ich möchte per Post hiddenfields ( in HTML versteckte Felder)senden. Muss ich da auch den Outstream nachbasteln???

MFG TSLaughter
 

dronus

Mitglied
Denke ja. ob hidden oder nicht, POST ist POST...
Das einzige was man sich von obigem code wirklich sparen kann ist die stream()-methode, die eh nur eine zeile enthält :)
dafür muss man die felder eben in zeile 25 an den string basteln...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben