2016-05-09 21 views
2

私はプロジェクトにhttps://us.mc-api.net/のAPIを使用しようとしており、これをテストとして作成しました。ブラウザで動作するURLのFileNotFoundException

public static void main(String[] args){ 
    try { 
     URL url = new URL("http://us.mc-api.net/v3/uuid/193nonaxishsl/csv/"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
      String line; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
       } 
      in.close(); 
       } 
        catch (MalformedURLException e) { 
         e.printStackTrace(); 
        } 
        catch (IOException e) { 
         e.printStackTrace(); 
         System.out.println("I/O Error"); 

        } 
       } 
} 

そして、これは私のIOExceptionのエラーを与えているが、私は自分のWebブラウザで同じページを開き、これまで私は、コードから取得したいものです

false,Unknown-Username 

を得るとき。私は新しく、それがなぜ起こっているのか、なぜそれが本当にわからないのですか? EDIT:のStackTrace

java.io.FileNotFoundException: http://us.mc-api.net/v3/uuid/193nonaxishsl/csv/ 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
at java.net.URL.openStream(Unknown Source) 
at com.theman1928.Test.Main.main(Main.java:13) 
+0

私は実際にこれがうまくいくと考えました。それをトレースすると、 "false、Unknown-Username"が表示されるはずです。 IOExceptionがスローされたときに与えられたスタックトレースを投稿できますか? –

+0

指定されたURLは、コンテンツをブラウザに返すにもかかわらず、404 Not Found HTTPエラーを返します。このWebサービスがあなたのものであれば、代わりに200 OKを返すようにしてください。 – ManoDestra

+0

@ManoDestraそれは私のサービスではありませんが、その問題の場合は私は彼らに連絡したり、私が使用できる別のサービスを見つけようとします。 – theman1928

答えて

3

URLは、ステータスコード404を返すされているので、入力ストリーム(ここで軽度の推測)が作成され、したがって、ヌルであるれていません。ステータスコードを並べ替えるとOKになります。

は、このCSVでそれを実行し、それは結構です。other csv

エラーコードがあなたにとって重要であるならば、あなたは、HttpURLConnectionの使用することができます:あなたが前に応答コードを処理できるように

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    System.out.println("code:"+conn.getResponseCode()); 

を素早くif-then-elseチェックを進めてください。

1

これは、java.netクラスと実際のブラウザとの比較で、ワイヤプロトコルがどのように機能しているかに関係しています。ブラウザは、使用している単純なjava.net APIよりも洗練されています。

Javaで同等の応答値を取得するには、豊富なHTTP APIを使用する必要があります。

このコードは、ブラウザと同じ応答を提供します。しかし、あなたはApache HttpComponents jarファイルをダウンロードする必要が

コード:

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpUriRequest; 
import org.apache.http.impl.client.HttpClients; 

public class TestDriver 
{ 

public static void main(String[] args) 
{ 
    try 
    { 
     String url = "http://us.mc-api.net/v3/uuid/193nonaxishsl/csv"; 

     HttpGet httpGet = new HttpGet(url); 
     getResponseFromHTTPReq(httpGet, url); 
    } 
    catch (Throwable e) 
    { 
     e.printStackTrace(); 
    } 
} 

private static String getResponseFromHTTPReq(HttpUriRequest httpReq, String url) 
{ 
    HttpClient httpclient = HttpClients.createDefault(); 

    // Execute and get the response. 
    HttpResponse response = null; 
    HttpEntity entity = null; 
    try 
    { 
     response = httpclient.execute(httpReq); 
     entity = response.getEntity(); 
    } 
    catch (IOException ioe) 
    { 
     throw new RuntimeException(ioe); 
    } 

    if (entity == null) 
    { 
     String errMsg = "No response entity back from " + url; 
     throw new RuntimeException(errMsg); 
    } 

    String returnRes = null; 
    InputStream is = null; 
    BufferedReader buf = null; 
    try 
    { 
     is = entity.getContent(); 
     buf = new BufferedReader(new InputStreamReader(is, "UTF-8")); 

     System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 

     StringBuilder sb = new StringBuilder(); 
     String s = null; 
     while (true) 
     { 
      s = buf.readLine(); 
      if (s == null || s.length() == 0) 
      { 
       break; 
      } 
      sb.append(s); 
     } 

     returnRes = sb.toString(); 

     System.out.println("Response: [" + returnRes + "]"); 
    } 
    catch (UnsupportedOperationException | IOException e) 
    { 
     throw new RuntimeException(e); 
    } 
    finally 
    { 
     if (buf != null) 
     { 
      try 
      { 
       buf.close(); 
      } 
      catch (IOException e) 
      { 
      } 
     } 
     if (is != null) 
     { 
      try 
      { 
       is.close(); 
      } 
      catch (IOException e) 
      { 
      } 
     } 
    } 
    return returnRes; 
} 

} 

出力

応答コード:404

応答:[偽、不明-ユーザー名]

1

私はApache HTTPライブラリで試しました。 APIエンドポイントは状態コード404を返すように見えます。したがって、エラーです。私が使用したコードは以下の通りです。

public static void main(String[] args) throws URISyntaxException, ClientProtocolException, IOException { 
    HttpClient httpclient = HttpClients.createDefault(); 
    URIBuilder builder = new URIBuilder("http://us.mc-api.net/v3/uuid/193nonaxishsl/csv/"); 
    URI uri = builder.build(); 
    HttpGet request = new HttpGet(uri); 
    HttpResponse response = httpclient.execute(request); 
    System.out.println(response.getStatusLine().getStatusCode()); // 404 
} 

さらにAPIエンドポイントでエラーを証明200のステータスコードを返し何www.example.com又は有するhttp://us.mc-api.net/v3/uuid/193nonaxishsl/csv/を切り替えます。 [Apache HTTP Components] library hereをご覧ください。

関連する問題