Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Проблема с закачкой страницы.


Автор: unkis 29.6.2005, 21:56
Ребята пытаюсь закачать вот эту страницу http://www.mobile.de/cgi-bin/da.pl?id=11111111171499585&sprache=1

делаю это вот так вот

Код

int c;
    URL hp = new URL(Url);
    System.out.println("Url= "+Url);
    URLConnection hpCon = hp.openConnection();
    

    int len = hpCon.getContentLength();
    //System.out.println("len=" + len);
    if (len > 0) {
      //int i = len;
      InputStream input = hpCon.getInputStream();
      while (((c = input.read()) != -1) && (--len > 0)) {
        s2.append((char)c);
      }
      input.close();
    }
    else {
      System.out.println("Net sodergimogo ili no connection");
    }


Выдаёт следующую ошибку

Код

Url= http://www.mobile.de//cgi-bin/da.pl?bereich=pkw&top=1&id=11111111162043205&
********************
Net sodergimogo ili no connection
-1
-1



Немогу понять в чём проблемма, ведь зайти на страницу я могу => значит она существует.
Почему я тогда её не могу скачать?
И как мне её скачать?

Зарания благодарен.

Автор: Domestic Cat 30.6.2005, 01:17
Сервер шлет тебе респонс 403... Может он ждет какие хедеры?

Автор: igon 30.6.2005, 13:16
На getContentLength() не всегда можно полагаться. Например, при динамическом формировании ответа (у тебя - pl) он вполне может вернуть 0. Попробуй закомментировать проверку на длину.
Условие && (--len > 0) вообще лишнее

Посимвольное чтение из потока - не самый оптимальный вариант. Лучше -
BufferedInputStream, и читать, пока не вернет -1.


Автор: unkis 30.6.2005, 15:02
Domestic Cat
Что это за ошибка такая?

igon:
А как через BufferedInputStream, работать


Автор: igon 30.6.2005, 20:54
Код


...
        BufferedOutputStream out   = null;            // The output stream (for storing the contents of the file)
        BufferedInputStream  in    = null;            // The input stream (for reading the contents of the file
        URL                  url;
        HttpURLConnection    con;
        final int            block = 4096;            // размер буфера
        byte[]               buf   = new byte[block]; // буфер ввода/вывода
        int                  count = 0;               // The number of bytes read in one iteration
        
        boolean              notEmpty = false;

        try
          {
            url = new URL("http://"+urlStr); // Open a connection
            con = (HttpURLConnection)url.openConnection(); // Cast для HTTP протокола, для других должен быть другой
            con.setDoInput  (true);
            con.setUseCaches(false);
            con.setAllowUserInteraction( false );
           con.setFollowRedirects( false );
            count = 0;  // The number of bytes read in one iteration
            in = new BufferedInputStream(con.getInputStream()); // Получение входного потока
                while((count = in.read(buf, 0, block)) != -1)
                  {
                    if (count > 0) 
                      {
                        if (!notEmpty)
                          {
                            notEmpty = true;
                            out = new BufferedOutputStream(new FileOutputStream(saveToFolder+outFileNamePrefix+fileIn)); // Output file
                          }
                        out.write(buf, 0, count);
                      }
                  }
          }
          catch (FileNotFoundException e)
            {
              e.printStackTrace();
            }
          catch (MalformedURLException e)
            {
              e.printStackTrace();
            }
          catch (IOException e)
            {
              e.printStackTrace();
            }
...

Автор: unkis 1.7.2005, 12:02
При помощи твоего кода возвращается следующий exeption.

Код

java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.mobile.de//cgi-bin/da.pl?bereich=pkw&top=1&id=11111111162043205&
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at de.unkis.Parser.UrlConaction(Parser.java:139)
    at de.unkis.Parser.start(Parser.java:46)
    at de.unkis.MainApp.main(MainApp.java:25)



Как с етим бороться?

Автор: Metal_Heart 1.7.2005, 14:33
unkis а ты, случаем, не через прокси в инет выходишь?

Автор: korob2001 1.7.2005, 16:24
Мне он уже вообще вот что отвечает:
Код

Der von Ihnen gesuchte Datensatz existiert nicht mehr.  
 
Das Fahrzeug wurde bereits aus der Datenbank gelöscht. 

Помоему этот автомобиль уже не доступен. Попробуй другой url, например этот:
http://www.mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111171680812&sprache=1

Автор: unkis 1.7.2005, 21:34
Цитата(korob2001 @ 1.7.2005, 16:24)
Мне он уже вообще вот что отвечает:
Код

Der von Ihnen gesuchte Datensatz existiert nicht mehr.  
 
Das Fahrzeug wurde bereits aus der Datenbank gelöscht. 

Помоему этот автомобиль уже не доступен. Попробуй другой url, например этот:
http://www.mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111171680812&sprache=1

Пробивал и ету ссилку, тоге ничего не получается, такая же ошибка как и више.

что делат даге не знаю.


и proxyi я не исползую

Автор: korob2001 2.7.2005, 02:01
Я в Java пока не силён, могу на Perl кинуть код, который делает это. smile

Автор: unkis 2.7.2005, 11:31
Кинь посмотрим на него.

Автор: korob2001 2.7.2005, 12:32
Вот простой вариант, хотя наверное можно ещё проще:
Код

#!/usr/bin/perl
use strict;
use LWP::UserAgent;

# URL СТРАНИЦЫ
my $url = 'http://www.mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111171680812&sprache=1';

# Заголовок страницы, если не выводишь полученную информацию в браузер можно убрать
print "Content-type: text/html\n\n";


my $user_agent = LWP::UserAgent->new();
# Прикинемся браузером
$user_agent->agent("Mozilla/6.0");
# Подготавливаем GET запрос
my $request = HTTP::Request->new(GET => $url);
# Указываем, какой тип документа готовы принять
$request->header('Accept' => 'text/html');
# Посылаем запрос серверу
my $result = $user_agent->request( $request );

# Если запрос прошёл успешно, значит выводим ответ сервера
if ( $result->is_success ) {
     print $result->content();
} else {
     # В противном случае, сообщение об ошибке
     print "Fuck! Can't connect: " . $result->status_line . "\n";
}

Сейчас попробую написать чего-нить попроще. smile

А такой код, создаст зеркало этой страницы у тебя на винте, в текущем каталоге:
Код

#!/usr/bin/perl
use LWP::Simple;
# URL СТРАНИЦЫ
my $url = 'http://www.mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111171680812&sprache=1';
mirror("$url", "test.html");

Автор: igon 3.7.2005, 12:35
Код

package unkis;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Test 
  {
    public Test()
      {
      }

    /** Download a file */
    public void downloadIt() 
      {
        BufferedOutputStream out   = null;            // The output stream (for storing the contents of the file)
        BufferedInputStream  in    = null;            // The input stream (for reading the contents of the file
        URL                  url;
        HttpURLConnection    con;
        final int            block = 4096;            // размер буфера
        byte[]               buf   = new byte[block]; // буфер ввода/вывода
        int                  count = 0;               // The number of bytes read in one iteration
        boolean              notEmpty;
        notEmpty    = false;
        try
          {
            String urlStr = "http://www.mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111171680812&sprache=1";
            url = new URL(urlStr); // Open a connection
            con = (HttpURLConnection)url.openConnection(); // Cast для HTTP протокола, для других должен быть другой
            con.setDoInput  (true);
            con.setUseCaches(false);
            con.setAllowUserInteraction( false );
           con.setFollowRedirects( false );
// !!!
            con.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
// !!!
            count = 0;  // The number of bytes read in one iteration
            if (con.getResponseCode() >= 400)
              {
                System.out.println("Ошибка "+con.getResponseCode()+" приема файла " 
                                              +  " - " + con.getResponseMessage());
              }
            else
              {
                in = new BufferedInputStream(con.getInputStream()); // Получение входного потока
                while( (count = in.read(buf, 0, block)) != -1)
                  {
                    if (count > 0) 
                      {
                        if (!notEmpty)
                          {
                            notEmpty = true;
                            out = new BufferedOutputStream(new FileOutputStream("C:\\unkis.html")); // Output file
                          }
                        out.write(buf, 0, count);
                      }
                  }
              }
          }
          catch (FileNotFoundException e)
            {
              e.printStackTrace();
            }
          catch (MalformedURLException e)
            {
              e.printStackTrace();
            }
          catch (IOException e)
            {
              e.printStackTrace();
            }
          finally
            {
              if (out != null) 
                { 
                  try {
                        out.close();
                      }  
                      catch (IOException e)
                        {
                          e.printStackTrace();
                        }
                }
              if (in != null) 
                {
                  try {
                        in.close();
                      }  
                      catch (IOException e)
                        {
                          e.printStackTrace();
                        }
                }
            } 
      }

    public static void main(String[] args)
      {
        Test test = new Test();
        test.downloadIt();
      }
  }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)