Avatar billede olemis Nybegynder
12. maj 2012 - 20:28 Der er 8 kommentarer

Post xml til url og modtag xml svar

Hej

Jeg har vovet mig ud på dybt vand.

Jeg skal kalde en url og poste en XML streng til den. URL'en svarer med en anden xml streng.

Er der en eller anden som måske kan hjælpe mig med det. Efter at have googlet lidt frem og tilbage + fundet min gamle java bog frem er jeg ikke kommet frem til at koden under her giver mig et reply fra URL'en om at mine input er forkert ( Big surprise :-) ).
Jeg er meget i tvivl om hvordan jeg får postet xml'en til url'en er der en som kan hjælpe med det ? Ja måske er det en helt anden tilgang jeg skal bruge ?

  PostMethod post = new PostMethod(strURL);

        post.setRequestHeader(
                "Content-type", "text/xml; charset=ISO-8859-1");

        HttpClient httpclient = new HttpClient();
Avatar billede arne_v Ekspert
12. maj 2012 - 23:06 #1
Noget a la:

  public static String testPost(String url, String body, String conttyp) throws HttpException, IOException {
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(url);
        post.setRequestEntity(new StringRequestEntity(body, conttyp, "UTF-8"));
        client.executeMethod(post);
        post.getResponseBodyAsString();
    }
Avatar billede olemis Nybegynder
14. maj 2012 - 17:58 #2
Syntes ikke helt jeg kan få det til at spille. Jeg har lige hurtig lavet en test med det her:

package postxml;

import java.io.*;
import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.HttpException;

public class PostXML{


    public static void main(String[] args) throws HttpException, IOException {

        String url = "http://tralla.com/xmlservice/";
        String body = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?><CAPSRequest CustomerID=\"XXX\"><ProductRequest><Language>ENU</Language><UnitSystem>UC_SI_Units</UnitSystem><Frequency>50</Frequency><ProductNumber>59504539</ProductNumber><QuotationTextWanted>true</QuotationTextWanted><CurveSetWanted>true</CurveSetWanted></ProductRequest></CAPSRequest> ";
        String conttyp = "text/xml; charset=ISO-8859-1"; //"XML";
       
          System.out.println(url);
          System.out.println(body);
          System.out.println(conttyp);
       
          try {
           
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(url);
       
        client.setConnectionTimeout(8000);

        post.setRequestEntity(new StringRequestEntity(body, conttyp, "UTF-8"));
       
        int result = client.executeMethod(post);
 
        post.getResponseBodyAsString();
       
            // Display status code
            System.out.println("Response status code: " + result);

            // Display response
            System.out.println("Response body2: ");
            System.out.println(post.getResponseBodyAsString());
           
            post.releaseConnection();
           
        }
    catch (HttpException httpe) {
       
            httpe.printStackTrace();
         
        }
          catch (IOException ioe) {
              ioe.printStackTrace();
           
    } 

    }
}
Jeg får følgende svar:

Response status code: 200
Response body2:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<CAPSResponse><CAPSOutput><Error>No XmlRequest data</Error></CAPSOutput></CAPSResponse>


Så jeg må gøre et eller andet galt mht. XML'en, for såvidt jeg ved betyder status code 200 "forbindelse ok" eller noget i den stil.
Avatar billede arne_v Ekspert
14. maj 2012 - 18:33 #3
Kaldet virker teknisk set.

Men serveren kan ikke lide det XML du sender i request.
Avatar billede olemis Nybegynder
14. maj 2012 - 18:53 #4
Jeg sidder med en lille hurtig web page som submitter strengen der kan jeg kun fremprovokere samme fejl hvis jeg lader XML feltet være Null.

<CAPSResponse><CAPSOutput><Error>No XmlRequest data</Error></CAPSOutput></CAPSResponse>

Så jeg sidder lige og undrer mig om det er fordi at strengen slet ikke bliver postet til serveren.
Avatar billede arne_v Ekspert
15. maj 2012 - 04:16 #5
Koden ser ikke specielt forkert ud.

Men der er nok en lille bitte detalje som driller.

Du kan proeve at rette:

post.setRequestEntity(new StringRequestEntity(body, conttyp, "UTF-8"));

til:

post.setRequestEntity(new StringRequestEntity(body, conttyp, "ISO-8859-1"));

da det tilsyndeladende er hvad du bruger.

Du kan proeve at rette:

String conttyp = "text/xml; charset=ISO-8859-1"; //"XML";

til:

String conttyp = "application/xml"; //"XML";
Avatar billede arne_v Ekspert
15. maj 2012 - 04:24 #6
Hvis du gav mig en URL der virker kunne jeg proeve at eksperimentere lidt.
Avatar billede olemis Nybegynder
16. maj 2012 - 18:22 #7
Hej Arne

Jeg har prøvet ovenstående. Jeg kan umiddelbart ikke få det til at spille.

Jeg vil gerne give dig URL + XML med bruger informationer, men må jeg ikke maile dem til dig da jeg helst ikke vil have dem til at ligge i tråden. Løsningen skal selvfølgelig postes.
Avatar billede arne_v Ekspert
17. maj 2012 - 03:24 #8
Bare send en email.
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