2016-04-22 7 views
1

Ich habe einen Rest HTTP-URL, aus dem ich die XML-Antwort extrahieren muss. Wenn ich die URL mit einem Browser durchsuche, wird HTML-Inhalt zurückgegeben. Mein Code sieht auch denselben HTML-Inhalt statt XML-Inhalt.java URLConnection zu HTTP-URL und Extrahieren von XML-Antwort

Gibt es eine Möglichkeit, den XML-Inhalt anstelle von HTML-Inhalt zu erhalten? Im folgenden Code bekomme ich nur die HTML-Antwort. Aber wenn ich mit postman plugin in chrome nachschaue, zeigt es eine nette XML-Antwort. Wie bekomme ich die gleiche Antwort mit meinem Code?

public static void sendURL(String urlValue)throws Exception{ 
    URL oracle = new URL("https://whois.arin.net/rest/asn/AS2639"); 

    URLConnection yc = oracle.openConnection(); 

    yc.setRequestProperty("content-type", "application/xml"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(
           yc.getInputStream())); 
    String inputLine; 
    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 
} 

Antwort

1

Versuchen Sie, diese zu ersetzen:

yc.setRequestProperty("content-type", "application/xml"); 

mit diesem:

yc.setRequestProperty("Accept", "application/xml"); 

der Tat ist der Hauptzweck völlig anders ist, Content-Type beschreibt, was Sie in den Körper Ihrer Anfrage haben, während Accept gibt dem Server an, welche Art von Inhalt der Client verwalten kann, was Sie tun möchten.

Content-Type:

Der MIME-Typ des Körpers des Antrags (mit POST verwendet und PUT Anfragen)

akzeptieren:

Content-Typen, die für die Antwort akzeptabel sind.

+0

@RaviU Ich bin mir nicht sicher, ich verstehe, was Sie damit meinen, aber ich verbesserte ein wenig meine Antwort –

+0

danke für die Antwort. Ich habe das Gleiche gemacht und gearbeitet. Ich hoffe du verstehst meine Frage klar. – user88975

+0

@ user88975 Cool! :-) –

0

Sie haben also bereits einen Stream. Als nächstes müssen Sie diesen Stream an eine Bibliothek übergeben, die XML dekodieren und analysieren kann. Versuchen https://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.html#parse(org.xml.sax.InputSource)

UPDATE

Sorry, Ihre erste Frage ist nicht ganz klar war. Wenn Ihr Java-Aufruf der HTTP-Anfrage HTML liefert und der gewünschte eine XML-Antwort ist, muss ein gewisser Unterschied zwischen den HTTP-Anfragen bestehen, die Sie über den Browser und über Java machen. Sie können ein Tool wie TCPMON verwenden, um zwischen Ihrem Back-End und Ihrem Java-Programm zu sitzen, um die unformatierte HTTP-Anforderung zu erfassen und diese dann mit der, die Sie über den Browser erstellen, zu vergleichen.

Da HTTP ein Anfrage/Antwort-Paar ist, sollten äquivalente HTTP-Anfragen immer die gleiche Antwort zurücksenden.

+0

eigentlich was meine Streams zurückgibt ist voll von HTML und nicht XML. Ich sehe nicht die XML-Antwort irgendwo in der HTML-Antwort – user88975

+0

oh richtig, sorry Ihre Frage war nicht sehr klar. Wenn Ihr Browseraufruf XML sendet und Ihre Anforderung HTML zurücksendet, sollten Sie die HTTP-Rohanforderungen überprüfen und vergleichen. Sie sollten in der Lage sein zu finden, was fehlt. – RaviU

+0

Bitte sehen Sie meine aktualisierte Antwort. – RaviU

0

Ich fand die Antwort. Aktualisierter Code Wir müssen nur die XML-Antwort akzeptieren.

public static void sendURL(String urlValue)throws Exception{ 
    URL oracle = new URL("https://whois.arin.net/rest/asn/AS2639"); 

    URLConnection yc = oracle.openConnection(); 

    yc.setRequestProperty("accept", "application/xml"); 

    BufferedReader in = new BufferedReader(new InputStreamReader(
           yc.getInputStream())); 
    String inputLine; 
    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 
} 
+0

Ja und meine aktualisierte Antwort sagt Ihnen, warum das so ist. Es gab das Problem, dass Sie den HTTP Accept-Header in Ihrer Anfrage nicht gefunden haben, und Sie können dies mit einem Tool wie TCPMON herausfinden. – RaviU

+0

Ich würde nicht tcpmon Sachen stattdessen tun, würde ich java docs suchen, um meine Antwort zu finden. Außerdem glaube ich immer noch, dass meine Frage extrem klar ist. – user88975

+0

Sie verwenden meine Antwort, um Ihre eigene Antwort zu erstellen, indem Sie einfach die Änderung anwenden, die ich erwähnte, und sie als beste Antwort markieren, nur LOL. Ich sollte das auch tun, um mehr Punkte zu bekommen ;-) –

Verwandte Themen