когда получить содержимое страницы из URL, соединение всегда возвращает nopermistion? - PullRequest
0 голосов
/ 07 мая 2010

У меня есть способ вернуть содержимое страницы ссылки

но когда он запускается, всегда возвращайте "Не допускать", пожалуйста, проверьте его

вот код для возврата строкового содержимого страницы

public static String getPageContent(String targetURL) throws Exception {
        Hashtable contentHash = new Hashtable();
        URL url;
        URLConnection conn;

        // The data streams used to read from and write to the URL connection.
        DataOutputStream out;
        DataInputStream in;

        // String returned as the result .
        String returnString = "";

        // Create the URL object and make a connection to it.
        url = new URL(targetURL);
        conn = url.openConnection();
        // check out permission of acess URL
        if (conn.getPermission() != null) {
            returnString = "Do not Permission access URL ";
        } else {

            // Set connection parameters. We need to perform input and output,
            // so set both as true.
            conn.setDoInput(true);
            conn.setDoOutput(true);

            // Disable use of caches.
            conn.setUseCaches(false);

            // Set the content type we are POSTing. We impersonate it as
            // encoded form data
            conn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");

            // get the output stream .
            out = new DataOutputStream(conn.getOutputStream());
            String content = "";

            // Create a single String value pairs for all the keys
            // in the Hashtable passed to us.
            Enumeration e = contentHash.keys();
            boolean first = true;
            while (e.hasMoreElements()) {
                // For each key and value pair in the hashtable
                Object key = e.nextElement();
                Object value = contentHash.get(key);

                // If this is not the first key-value pair in the hashtable,
                // concantenate an "&" sign to the constructed String
                if (!first)
                    content += "&";

                // append to a single string. Encode the value portion
                content += (String) key + "="
                        + URLEncoder.encode((String) value);

                first = false;
            }

            // Write out the bytes of the content string to the stream.
            out.writeBytes(content);
            out.flush();
            out.close();

            // check if can't read from URL

            // Read input from the input stream.
            in = new DataInputStream(conn.getInputStream());

            String str;
            while (null != ((str = in.readLine()))) {
                returnString += str + "\n";
            }

            in.close();
        }

        // return the string that was read.
        return returnString;
    }

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Разрешения, связанные с объектом соединения, не имеют ничего общего с разрешением сервера HTTP на другом конце соединения. Как отметил Ральф, это относится к локальной политике безопасности JVM. Один интерпретирует статус ответов службы HTTP (например, 200, 403 и т. Д.) Через HttpURLConnection.getResponseCode().

0 голосов
/ 12 мая 2010

Вы уверены, что правильно интерпретируете значение getPermission()? Javadoc на getPermission() [1] утверждает:

Возвращает:

объект разрешения, представляющий разрешение, необходимое для установления соединения, представленного этим URLConnection.

Означает: возвращается ли объект Permission или нет, просто сообщает вам, может ли вашей JVM потребоваться какое-либо действие, предоставленное в политике безопасности JVM, для подключения к указанному URL. Вы на самом деле не проверяете разрешение самостоятельно в своем примере кода выше.

Обычно вам не нужно этого делать, так как большинство исполняющих классов в любом случае делают это самостоятельно. SecurityManager, участвующий в этом, выдаст соответствующее исключение, если фактическое разрешение не предоставлено.

Я предлагаю просто открыть соединение и начать работу, не проверяя getPermission(), поскольку вы все равно это узнаете, когда не будет установлено разрешение при первом вызове, когда выбрасывается SecurityException.

[1] http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLConnection.html#getPermission()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...