0

なぜ UnknownHostException をスローするのですか?

    parameters = "user=akirus&pass=1234&version=1";
    String result = excutePost("http://russianimperial.ru/minecraft/loginServer.php", parameters);

  public static String excutePost(String targetURL, String urlParameters) {
      HttpURLConnection connection = null;
      try {
          URL url = new URL(targetURL);
          connection = (HttpURLConnection)url.openConnection();

          connection.setRequestMethod("POST");
          connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
          connection.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length));
          connection.setRequestProperty("Content-Language", "en-US");

          connection.setUseCaches(false);
          connection.setDoInput(true);
          connection.setDoOutput(true);

          DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
          wr.writeBytes(urlParameters);
          wr.flush();
          wr.close();

          InputStream is = connection.getInputStream();
          BufferedReader rd = new BufferedReader(new InputStreamReader(is));

          StringBuffer response = new StringBuffer();
          String line;
          while ((line = rd.readLine()) != null) {
              response.append(line);
              response.append('\r');
          }
          rd.close();

          String str1 = response.toString();
          return str1;
     }catch (Exception e) {
         e.printStackTrace();
         return null;
     }finally {
         if (connection != null)
             connection.disconnect();
     }
  }

URL http://russianimperial.ru/minecraft/loginServer.phpが有効です。以前は素晴らしい作品です。UnknownHostExceptionこの場所に投げ込まれましたInputStream is = connection.getInputStream();。javadoc にconnection.getInputStream()は、プロトコルが入力をサポートしていない場合にこの例外をスローできると書かれていますが、http は入力をサポートしていると思います。

4

3 に答える 3

2

実際、このコードはUnknownHostExceptionを生成します。しかし、完全なスタックトレースを見てください:

java.net.UnknownHostException: updaters
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:523)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:227)
    at sun.net.www.http.HttpClient.New(HttpClient.java:300)
    at sun.net.www.http.HttpClient.New(HttpClient.java:317)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
    at sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2113)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1367)
    at Host.excutePost(Host.java:43)
    at Host.main(Host.java:14)

URL接続がリダイレクトしようとすると、この例外が発生し、リダイレクトはいくつかの不明確な「アップデーター」に送られます。したがって、これは「russianimperials.ru」ではなく、リダイレクトされます。なんで?それはページに依存します-あなたはまたあなたがパラメータを渡す方法で何か間違ったことをしているかもしれません。

于 2013-01-03T10:03:43.197 に答える
1

クライアントとサーバー間のやり取りを見ると、次のことがわかります。

* Request
GET / HTTP/1.1
Host: russianimperial.ru
User-Agent: Java/1.6.0_26

 * Response
HTTP/1.1 302 Found
Server: nginx/0.8.55
Date: Thu, 03 Jan 2013 11:45:08 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Location: http://updaters/tds/go.php?sid=1
Content-Length: 286

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://updaters/tds/go.php?sid=1">here</a>.</p>
<hr>
<address>Apache/2 Server at russianimperial.ru Port 80</address>
</body></html>

ユーザー エージェントを変更するか、ユーザー エージェントを設定しない場合、リダイレクトはありませんが、不明な理由により、Java ユーザー エージェントはこのサイトからブロックされ、存在しないホストにリダイレクトされます。

ユーザー エージェントを変更すると、すべてがスムーズに実行されます

于 2013-01-03T11:53:53.127 に答える
1

JavaDocを見てください:

UnknownHostException は

ホストの IP アドレスを判別できなかったことを示すためにスローされます

SOの質問をする前にそれをしてください。

于 2013-01-03T09:52:45.103 に答える