powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / org.apache.commons.httpclient
5 сообщений из 5, страница 1 из 1
org.apache.commons.httpclient
    #33298596
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использую httpclient (последнюю версия из 2.x на сайте). делаю следующее:

имеется два фрейма (верхний и нижний) в верхнем есть строка для ввода и кнопка.

в строку вводится url, по которому собственно говорят нужно перейти в нижнем фрейме. вот исходный код сервлета, который это дело обрабатывает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 import  org.apache.commons.httpclient.HttpClient;
 import  org.apache.commons.httpclient.HttpException;
 import  org.apache.commons.httpclient.HttpStatus;
 import  org.apache.commons.httpclient.methods.GetMethod;

 import  javax.servlet.http.HttpServlet;
 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpServletResponse;
 import  javax.servlet.ServletException;
 import  java.io.IOException;
 import  java.io.PrintWriter;

 public   class  Parser  extends  HttpServlet {
     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {
        doGet(request, response);
    }

     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {


        System.setProperty("apache.commons.httpclient.cookiespec", "COMPATIBILITY");
        String url = request.getParameter("url");



          // Create an instance of HttpClient.
          HttpClient client =  new  HttpClient();

          // Create a method instance.
          GetMethod method =  new  GetMethod(url);

           try  {
            // Execute the method.
             int  statusCode = client.executeMethod(method);

             if  (statusCode != HttpStatus.SC_OK) {
              System.err.println("Method failed: " + method.getStatusLine());
            }

            // Read the response body.
             byte [] responseBody = method.getResponseBody();

            // Deal with the response.
            // Use caution: ensure correct character encoding and is not binary data
            response.addHeader("host",method.getHostConfiguration().getHost());
            PrintWriter out = response.getWriter();              
            out.println( new  String(responseBody));
            out.close();

          }  catch  (HttpException e) {
            System.err.println("Fatal protocol violation: " + e.getMessage());
            e.printStackTrace();
          }  catch  (IOException e) {
            System.err.println("Fatal transport error: " + e.getMessage());
            e.printStackTrace();
          }  finally  {
            // Release the connection.
            method.releaseConnection();            
          }
    }
}

в итоге имеем следующее:

1. при вводе http://www.apache.org страница появляется без картинок
2. при вводе http://www.ya.ru страница появляется нормально с картинками (наверняка в html картинка прописана с абсолютным src, а не относительным как на apache.org). но после того, как полностью загружается, весь frameset перегружается новой страницей. (т.е. вместо исходного: вверху поле ввода, внизу яндекс, получается везде яндекс и никаких фреймов).
3. До того как я добавил строчку
Код: plaintext
response.addHeader("host",method.getHostConfiguration().getHost());
такие сайты как http://www.microsoft.com и другие не открывались. Вылетала ошибка unknown host. Соответственно, наверняка надо добавить что-то еще. (ну это я так думаю :) )

Вот мой первый вариант сервлета:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 import  org.apache.commons.httpclient.*;
 import  org.apache.commons.httpclient.methods.GetMethod;

 import  javax.servlet.http.HttpServlet;
 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpServletResponse;
 import  javax.servlet.ServletException;
 import  java.io.IOException;
 import  java.io.PrintWriter;

 public   class  Parser  extends  HttpServlet {
     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {
        doGet(request, response);
    }

     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {
        String url = request.getParameter("url");
        HttpClient client =  new  HttpClient();
        HttpMethod method =  new  GetMethod(url);

        client.executeMethod(method);
        Header[] h = method.getRequestHeaders();
         for  ( int  i= 0 ; i<h.length;i++) {
            response.addHeader(h[i].getName(),h[i].getValue());
        }
        String str = method.getResponseBodyAsString();
        response.setHeader("host",method.getHostConfiguration().getHost());
        PrintWriter out = response.getWriter();
        out.println(str);
        method.releaseConnection();
        out.close();
    }
}
здесь берутся все headers и выставляются в response. в итоге имеем:

1. http://www.apache.org все по-старому. картинки не показываются
2. http://www.ya.ru картинки показываются, фреймсет по-прежнему заменяется, но теперь показывается неправильная кодировка.

и еще:
при переходе на версию org.apache.commons.httpclient 3.x ничего вообще не работает. при нажатии на кнопку вылетает исключение чего-то-там.DoFilter...
...
Рейтинг: 0 / 0
org.apache.commons.httpclient
    #33298610
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%)) клиника ваще! зачем тебе это?

1. http://www.apache.org все по-старому. картинки не показываются
2. http://www.ya.ruкартинки показываются, фреймсет по-прежнему заменяется, но теперь показывается неправильная кодировка.

на apache.org картинки в html прописаны с относительными путями
/images/horsefuck.jpg
а на ya.ru с абсолютными http://img.yandex.ru/dogfart.png
соотв если все работает с localhost то в первом случае убдет localhost/images/horsefuck.jpg

just another freak in the Freak Kingdom
...
Рейтинг: 0 / 0
org.apache.commons.httpclient
    #33298629
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off

коты, ты в аське бываешь? вопрос есть...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
org.apache.commons.httpclient
    #33300219
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я прекрасно понимаю, что там относительные пути, поэтому и спросил как можно это лечить.
...
Рейтинг: 0 / 0
org.apache.commons.httpclient
    #33300381
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поясни зачем тебе делать браузер через сервлет, просто интересно =)))

исправить можно сунув <base> в <head>

например

<html>
<head>
<base href="http://apache.org/" />
</head>
<body>
<img src="/images/asf_logo_wide.gif" alt="The Apache Software Foundation" align="left" border="0"/>
</body>
</html>


just another freak in the Freak Kingdom
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / org.apache.commons.httpclient
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]