2016-04-22 24 views
1

私はXML応答を抽出する必要がある残りのhttp URLを持っています。ブラウザを使用してURLをブラウズすると、HTMLコンテンツが返されます。私のコードでは、XMLコンテンツの代わりに同じHTMLコンテンツが表示されます。java URLConnectionからhttp URLへのアクセスとXML応答の抽出

HTMLコンテンツの代わりにXMLコンテンツを取得する方法はありますか?以下のコードでは、html応答のみを取得しています。しかし、私がクロムのポストマンプラグインでチェックすると、素敵なXMLレスポンスが表示されます。自分のコードを使って同じ応答を得るにはどうすればいいですか?

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(); 
} 

答えて

1

はこれを交換してみ

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

確かに主な目的は全く異なる、Content-TypeはあなたがAcceptながら、リクエストのボディに持っているものを説明しどのような種類のコンテンツをクライアントが管理できるのかをサーバーに示します。

のContent-Type:

リクエストのボディのMIMEタイプ(POSTを使用して 要求をPUT)

が受け入れ:

を応答に受け入れられるコンテンツタイプ。

+0

@RaviU私はあなたがそれで何を意味するのか分かりませんが、私は少し私の答えを改善しました –

+0

答えに感謝します。私は同じことをして働いた。私の質問をはっきりと理解していただきたいと思います。 – user88975

+0

@ user88975よろしく! :-) –

0

だからあなたは既にストリームを持っています。次に行う必要があるのは、そのストリームをXMLをデコードして解析できるライブラリに渡すことです。申し訳ありません https://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.html#parse(org.xml.sax.InputSource)

UPDATE

を試してみて、あなたの最初の質問は非常に明確ではありませんでした。 HTTP要求のJava呼び出しがHTMLを生成し、必要なものがXML応答である場合、ブラウザーとJavaを介して行ったHTTP要求の間にはいくつかの違いがなければなりません。バックエンドとJavaプログラムの間にTCPMONのようなツールを置くことで、生のHTTPリクエストを取得し、それをブラウザ経由で比較することができます。

HTTPは要求/応答のペアなので、同等のHTTP要求は常に同じ応答を返す必要があります。

+0

実際に私のストリームが返すものは、HTMLではなくXMLでいっぱいです。私はhtml応答 – user88975

+0

ああ、どこにxml応答が表示されませんよ、あなたの質問は非常に明確ではなかった申し訳ありません。ブラウザの呼び出しでXMLが送信され、リクエストがHTMLを返送している場合は、生のHTTPリクエストを確認して比較する必要があります。あなたは欠けているものを見つけることができるはずです。 – RaviU

+0

最新の回答をご覧ください。 – RaviU

0

答えが見つかりました。更新されたコード。 xmlレスポンスだけを受け入れるだけです。これで

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

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

はい、私の更新された答えは、その理由を示しています。リクエストにHTTP Acceptヘッダーがないと問題が発生し、TCPMONのようなツールを使用して確認できます。 – RaviU

+0

私は代わりにtcpmonのことをしません、私は私の答えを見つけるためにJavaのドキュメントを検索します。また、私はまだ私の質問は非常に明確であると信じています – user88975

+0

あなたは自分の答えを使用して、私が言及した修正を適用し、最高の答え、LOLだけをマークすることによってあなた自身の答えを作成します。 –

関連する問題