Avatar billede globen Nybegynder
08. april 2008 - 13:59 Der er 3 kommentarer og
1 løsning

Custom http post

Hej Eksperter!

Jeg skal udvikle en applikation, som bland andet sender transport instruktioner til vores transportør. Dette sendes via http protokollen. Vores transportør forventer at modtage et http post, som ser ud som nedenstående:

POST /hapld/tos/kdwapltos HTTP/1.1<cr/lf>
Host: www.pld-certify.ups.com<cr/lf>
Content-type: multipart/mixed; boundary=BOUNDARY<cr/lf>
Content-length: 1040<cr/lf>
<cr/lf>
--BOUNDARY<cr/lf>
Content-type: application/x-www-form-urlencoded<cr/lf>
Content-length: 140<cr/lf>
<cr/lf>
AppVersion=1.0&AcceptUPSLicenseAgreement=Yes&ResponseType=application/x-ups-pld&VersionNumber=V4R1&UserId=useridvalue&Password=passwordvalue<cr/lf>
<cr/lf>
--BOUNDARY<cr/lf>
Content-type: application/x-ups-binary<cr/lf>
Content-length: 719<cr/lf>
<cr/lf>
TRANSPORT_INSTRUCTION_MESSAGE<cr/lf>
<cr/lf>
--BOUNDARY--<cr/lf>


Findes der klasser i Java, som gør at jeg kan konstruere en besked som dette?

Det skal siges, at det af andre årsager endnu ikke er bestemt om denne applikation skal udarbejdes i C# eller Java. Just in case nogen skulle snuble over et meget lignende indlæg under C# :D
Avatar billede arne_v Ekspert
08. april 2008 - 15:10 #1
Du skal nok bruge (Http)URLConnection.

Her er to eksempler:

    private static void upload(String dirname, String filename) {
        try {
            URL url = new URL(UPLOAD_URL + "?filename=" + filename);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            InputStream is = new FileInputStream(dirname + File.separator + filename);
            OutputStream os = con.getOutputStream();
            byte[] b = new byte[100000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b, 0, n); 
            }
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                System.out.println("OK");
            } else {
                System.out.println("Error");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

og

  public void post() {
      try {
        String request = marshall();
        URL url = new URL("http://localhost:8082/axis/Test.jws");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);
        con.setAllowUserInteraction(false);
        con.setRequestProperty("Content-Length", Integer.toString(request.length()));
        con.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
        con.setRequestProperty("SOAPAction", "Test.jws");
        OutputStream out = con.getOutputStream();
        out.write(request.getBytes());
        out.flush();
        out.close();
        System.out.println(con.getResponseCode() + " - " + con.getResponseMessage());
        InputStream in = con.getInputStream();
        byte[] b = new byte[1000];
        int n;
        while((n = in.read(b)) >= 0) {
            System.out.println(new String(b,0,n));
        }
      } catch (MalformedURLException e1) {
        System.out.println(e1.getMessage());
      } catch (IOException e2) {
        System.out.println(e2.getMessage());
      }
  }
Avatar billede arne_v Ekspert
08. april 2008 - 15:15 #2
Eksemplerne er ikke eksakt match, men de skulle vise hvordan du saetter HTTP headere
og skriver body.
Avatar billede globen Nybegynder
11. april 2008 - 08:21 #3
Jeg besluttede mig for at bruge C# løsningen (som Arne forøvrigt også hjalp mig med), og har egentlig ikke afprøvet ovenstående. Men Arne skal stadig have points for sin tid... Smid et svar.
Avatar billede arne_v Ekspert
11. april 2008 - 13:37 #4
svar

Java og C# måden at gøre det på er ret ens.
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