Avatar billede tos Praktikant
21. februar 2010 - 10:41 Der er 3 kommentarer og
1 løsning

Hvordan laver man POST fra Java

Jeg skal have flyttet nogle data fra en intern server til en server der er hostet en andet sted.
Vi vedligeholder data internt og serveren står ikke i DMZ. Derfor tænker jeg på at lave en noget Java, som kan lave en POST til et php script på webserveren (som var det en HTML formular man laver en submit på - bare fra Java).

Jeg vil gerne vedligeholde fx navn, adresse og e-mail adresse + 800 ekstra tegn, som skal sendes med POST da GET kan give problemer med for mange tegn.

Jeg er ikke nogen speciel javahaj... så hvordan laver man en POST fra backend-java?

/Torben
Avatar billede arne_v Ekspert
21. februar 2010 - 14:41 #1
Hvis der ikke er login o.lign. så kan du nøjes med (Http)URLConnection klassen som kommer med Java.

Eksempel:

        URL url = new URL("http://www.domain.dk/htbin/tell2");
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.setRequestMethod("POST");
        String info = "nam=val";
        con.setDoOutput(true);
        con.getOutputStream().write(info.getBytes());
        con.connect();
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = con.getInputStream();
            byte[] b = new byte[1000];
            int n;
            while((n = is.read(b)) >= 0) {
              System.out.println(new String(b,0,n));
            }
            is.close();
        }
        con.disconnect();
Avatar billede arne_v Ekspert
21. februar 2010 - 14:43 #2
Hvis der er login o.lign. så vil jeg anbefale Jakarta HttpClient.

Eksempel:

import java.io.IOException;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class Login {
    private HttpClient client;
   
    public Login() {
        client = new HttpClient();
    } 
   
    public void login(String url,
                      String userField, String userValue,
                      String passField, String passValue) {
        NameValuePair[] nvp = new NameValuePair[2];
        nvp[0] = new NameValuePair(userField, userValue);
        nvp[1] = new NameValuePair(passField, passValue);
        post(url, nvp);
    }
    public String get(String url) {
        GetMethod met = new GetMethod(url);
        try {
            client.executeMethod(met);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return met.getResponseBodyAsString();
    }
    public String post(String url, NameValuePair[] nvp) {
        PostMethod met = new PostMethod(url);
        if(nvp != null) {
            met.setRequestBody(nvp);
        }
      try {
        client.executeMethod(met);
      } catch (HttpException e) {
            e.printStackTrace();
      } catch (IOException e) {
            e.printStackTrace();
      }
        return met.getResponseBodyAsString();
    }
  public static void main(String[] args) {
        Login lgi = new Login();
        lgi.login("http://arne:8080/useradmin/Login",
                  "username", args[0],
                  "password", args[1]);
        System.out.println(lgi.get("http://arne:8080/useradmin/UserAdmin.jsp"));
  }
}

Note: ovenstående er til version 2.x/3.x af HttpClient - de har ændret API'et lidt i 4.x !
Avatar billede arne_v Ekspert
26. april 2010 - 03:54 #3
OK ?
Avatar billede tos Praktikant
26. april 2010 - 08:26 #4
arne_v  -det var lige det jeg skulle bruge... mange tak for svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester