# POST Request (HttpConnection)



## hdi (18. Mrz 2009)

Hey,
häng hier grad fest, weil ich mich mit Netzwerk-Programmierung überhaupt nicht auskenne.
Ich möchte gerne einen Post Request an eine Website schicken, genau genommen
soll's erstmal ein Login sein.

Ich habe mir dieses:

HttpClient - HttpClient Home

Package geholt, um das zu tun.
Leider stecke ich nun fest weil ich nicht genau weiss wie ich den Request abschicken soll.

die execute-Methode verlangt eine HttpConnection. Ich hab keine Ahnung was ich da
als Port eingeben soll... oder lieg ich grad voll daneben?

Hier mal mein Code:

[HIGHLIGHT="Java"]PostMethod post = new PostMethod(target.getLoginUrl());
				NameValuePair[] data = {
						new NameValuePair("txtAccountNumber_Account", login),
						new NameValuePair("ptxtPassword_Account", pwd) };
				post.setRequestBody(data);
				HttpConnection conn = new HttpConnection("www.eineWebsite.com",
						8080);
				try {
					conn.open();
					post.execute(new HttpState(), conn);
				} catch (IOException e2) {
					e2.printStackTrace();
				}[/HIGHLIGHT]

Ich weiss auch gar nicht wie ich überprüfen kann ob das hingehauen hat.
Ich kann mir zwar auch mit einer Methode von diesem Package den Response holen:

[HIGHLIGHT="Java"]InputStream in = post.getResponseBodyAsStream();[/HIGHLIGHT]

und das ist auch nicht null. Aber ich glaube nicht dass das so passt...

Bitte helft mir! Muss auch nicht mit Verwendung dieses Packages sein.
Danke :toll:


----------



## Gelöschtes Mitglied 5909 (18. Mrz 2009)

Http hat std port 80

Http post method Example : Http ClientApache CommonJava


----------



## tuxedo (19. Mrz 2009)

Hab für kleinere Dinge immer das hier als Vorlage benutzt: 

Sending a POST Request Using a URL (Java Developers Almanac Example)


----------



## ruutaiokwu (19. Mrz 2009)

hallo,

das hier funktioniert:


[HIGHLIGHT="Java"]import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class HttpCommonsPost
{
  private String url = null;

  public void setURL(final String url)
  {
    this.url = url;
  }

  public String doPostRequest(final NameValuePair[] caNameValuePairArr)
  {
    String lReturn = "";
    final HttpClient clHttpClient = new HttpClient();
    BufferedReader lBufferedReader = null;
    PostMethod lPostMethod = null;

    try
    {
      lPostMethod = new PostMethod(this.url);
      lPostMethod.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, true);
      lPostMethod.setRequestBody(caNameValuePairArr);
      final int clReturnCode = clHttpClient.executeMethod(lPostMethod);

      if (clReturnCode != HttpStatus.SC_NOT_IMPLEMENTED)
      {
        lBufferedReader = new BufferedReader(new InputStreamReader(lPostMethod.getResponseBodyAsStream()));
        String lReadLine = null;

        while (((lReadLine = lBufferedReader.readLine()) != null))
        {
          lReturn = lReturn.concat(lReadLine + "\r\n");
        }
      }
      else
      {
        throw new Exception("Failed!");
      }
    }
    catch (final Exception caException)
    {
      System.err.println("Exception: " + caException.getMessage());
    }
    finally
    {
      lPostMethod.releaseConnection();

      if (lBufferedReader != null)
      {
        try
        {
          lBufferedReader.close();
        }
        catch (final Exception caException)
        {
          final Runtime clRuntime = Runtime.getRuntime();
          clRuntime.gc();
        }
      }
    }

    return lReturn;
  }
}[/HIGHLIGHT]


anwendung:

[HIGHLIGHT="Java"]  HttpCommonsPost lApacheHttpCommonsPost = new HttpCommonsPost();
    lApacheHttpCommonsPost.setURL("http://localhost");

    NameValuePair[] lDataArr = { new NameValuePair("param1", "param1value"), new NameValuePair("param2", "param2value") };
    String ret = lApacheHttpCommonsPost.doPostRequest(lDataArr);
    System.out.println(ret);
[/HIGHLIGHT]


gruss, jan


----------



## Cyborg (30. Sep 2010)

Moin,

ich muss dieses Thema nochmal hochholen, da ich zur Zeit ein ähnliches Problem habe.
Ich hab mir jetzt auch schon die 3 Beispiele angeguckt, allerdings stocke ich schon bei den imports aus den Beispielen von raiL und jmar83.
Ich bekomme da ein package .. does not exist beim compilieren.

Muss ich hier vorher noch etwas anderes importieren ?


----------



## ruutaiokwu (30. Sep 2010)

hallo cyborg,

was dir fehlt, ist der "apache commons httpclient".

tipp: nimm das hier -> http://rapidshare.com/files/422296850/ApacheCommonsCollection12.jar, hier sind alle abhängigkeiten sauber aufgelöst...

ist von mir selbst zusammengestellt; andernfalls kannst du das original hier downloaden: HttpComponents - HttpComponents Downloads


gruss, jan


----------



## Cyborg (30. Sep 2010)

Ich danke dir.

Ich hatte vorhin zwar schon so ne Vermutung, aber musste dann los und konnte nicht weiter testen.
Jetzt klappts jedenfalls 

// Eine Sache ist mir jetzt noch aufgefallen.

Wie kann ich den Zeichensatz für den Output ändern ?
Alle Umlaute krieg ich jetzt unschön ausgegeben. :/


----------

