1

我想编写一个 Java 程序,该程序将访问 URL 并打印状态代码(即 200、404 等)。我正在使用HttpUrlConnectionapi 执行此操作,但它只显示异常,并且不打印状态代码。

URL url = new URL("https://abc.com/test.html");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();

int code = connection.getResponseCode();  
System.out.println("code: "+code);
4

4 回答 4

3

我尝试了您的代码如下,它对我来说很好:

import java.net.*;

public class Action 
{

    public static void main(String[] args)
    {
        try
        {
            URL url = new URL("http://localhost:8888");
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();

            int code = connection.getResponseCode();  
            System.out.println("code: "+code);
        }
        catch(Exception e)
        {

        }

    }
}


也与谷歌。

于 2013-08-23T05:23:59.413 回答
1

URL仅当您能够访问该 URL 时,您才会从 a 获得响应代码。在您的代码中,您似乎正在使用一个不存在的 URL,因此必须得到不可访问的主机异常。

尝试访问一个有效的 URL 并检查响应代码:

URL url = new URL("https://google.com");
于 2013-08-23T05:20:32.063 回答
0
URL url = new URL("https://www.google.com");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();

int code = connection.getResponseCode();  
System.out.println("code: "+code);

尝试使用其他网址,因为您使用的网址无效。' https://abc.com/test.html ' - 不存在这样的页面,所以它给出了例外。尝试一个有效的网址,它会正常工作。

于 2013-08-23T05:30:08.000 回答
0

即使我得到相同的异常,即 java.net.ConnectException: Connection timed out: connect if 我没有在代码中添加代理和端口。

java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
    at edu.sandip.TestURLConnection.main(TestURLConnection.java:23)

您收到此异常是因为您正在组织代理后面的组织上执行代码。

请使用以下修改后的代码。您将获得 200 OK 作为 responseCode。

    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;

    import javax.net.ssl.HttpsURLConnection;



    public class TestURLConnection {

        /**
         * @param args
         */
        public static void main(String[] args) {
            try{
                URL url = new URL("https://www.google.com/");
                System.setProperty("https.proxyHost", "XXX.XXX.XXX.XX");
                System.setProperty("https.proxyPort", "80"); 
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                //HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
                connection.setRequestMethod("GET");
                connection.connect();

                int code = connection.getResponseCode();  
                System.out.println("code: "+code);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

注意: 1. 您需要从您的组织网络管理员处获取 proxyHost IP。2. 你应该使用 HttpsURLConnection 来访问 https URL。

于 2013-08-23T05:35:33.740 回答