Witam!

Mam problem w pobraniu danych która została napisana w ASP. Nie wydaje mi się, żeby technologia tutaj miałą coś zmienić - ale może mi się tylko tak wydawać. Chodzi tutaj, pobranie danych będących wynikiem wyszukiwania wg kryteriów danych z serwisu urzędu patentowego RP. Link do szukajki w tym serwisie - http://bazy.uprp.pl/patentwebaccess/DatabaseChoose.aspx.

Z analizy nagłówków (firebug) i zabawy ciachami, wynika, że kluczowym elementem jest id sesji które są zapisywane w ciasteczkach.
W programie, staram się odwzorowywać nagłówki które tworzy firefox. Niestety, pomimo moich starań otrzymuje inne odpowiedzi z serwera niż firefox.

Generalnie schemat jest taki ->
GET http://bazy.uprp.pl/patentwebaccess/DatabaseChoose.aspx.
save cookies
POST http://bazy.uprp.pl/patentwebaccess/DatabaseChoose.aspx. - REDIRECT (302) wybranie bazy danych po przez ustawienie pola w POST - uzupełnienie formularza łącznie z ciachami otrzymanie w powrocie redirecta
GET Redirected_LOCATION // wysłanie geta o adres który otrzymałem z redirecta łącznie z wysłaniem ciastek a więc id sesji

dodam tutaj tylko, że location wskazuje na inną stronę a mianowicie na stronę na której link kliknąłem (górna belka nawigacyjna).
Info o tym, który link jest kliknięty wysyłam w POSTcie jako zmienna gdyż jest to jedno z ukrytych pól formularza FORM1.

Terach chcę powtórzyć kolejny krok (location jest w moim przypadku http://bazy.uprp.pl/patentwebaccess/AdvancedSearch.aspx)
znowu odwzorowując listę zmiennych wysłanych w POST wysyłam żądanie. Niestety otrzymuje Internal Error 500.
Co przeoczyłem?
Załączam 2 kawały kodu które ukazują to zachowanie.:
Próba odczytana wyników wyszukania po dacie zgłoszenia późniejszej niż 01-01-2010
klasa main:

public class EPTR {
    private static String handler;
    private static String charset="UTF-8";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws UnsupportedEncodingException, IOException {
        DatabaseManager m=new DatabaseManager();

        String vals[];
        args=new String[]{"CheckBox_PRZ","__EVENTTARGET","__EVENTARGUMENT","__VIEWSTATE"};
        vals=new String[]{"LinkButtonKategorie","","on",""};
m.Connect("DatabaseChoose");
        String strona=m.getContent();
        int startPos=0;
        int endPos=0;

        String token="\"__VIEWSTATE\" value=\"";
        startPos=strona.indexOf(token)+token.length();
        endPos=strona.indexOf("\"",startPos);
        token=strona.substring(startPos,endPos);
        vals=new String[]{"on","LinkButtonZaawansowane","",token};
        m.jsPostForm("DatabaseChoose", args, vals);
        strona=m.getContent();
      //  System.out.println(strona);

        token="\"__VIEWSTATE\" value=\"";
        startPos=strona.indexOf(token)+token.length();
        endPos=strona.indexOf("\"",startPos);
        token=strona.substring(startPos,endPos);
        args=new String[]{"ButtonSzukaj","TextBox1","__EVENTARGUMENT","__EVENTTARGET","__VIEWSTATE","comboOperatory","selAttribs","txtWyrazenie"};
        vals=new String[]{"Szukaj","","","",token,"=","NOC","( DZL >= '01-01-2010' )"};
        m.jsPostForm("SearchResults",args, vals);
        System.out.println(m.getContent());

klasa DatabaseManager - obsługa zapytań na strone

public class DatabaseManager {

    private static final Logger logger = Logger.getLogger(DatabaseManager.class.getName());

    static {
        logger.setLevel(Level.ALL);
        logger.setUseParentHandlers(true);
    }
// field declarations here
    private HttpURLConnection connection = null;
    private String cookie = "";
    private String charset = "UTF-8";

    public void Connect(String handler) throws IOException {
        connection = (HttpURLConnection) CreateConnection(handler,false);
        cookie = getCookie(connection);
    }

    private String getCookie(HttpURLConnection con) throws IOException {
        String headerName;
        for (int i = 1; (headerName = con.getHeaderFieldKey(i)) != null; i++) {
            if (headerName.equals("Set-Cookie")) {
                cookie += con.getHeaderField(i) + ";";
            }
        }
        return cookie;
    }

    public void jsPostForm(String target, String argument) {
    }

    public String querryByDate(String from, String to) throws UnsupportedEncodingException, IOException {
        String[] args;
        String[] vals;
        args = new String[]{"Txt2Box10", "TxtBox10"};
        vals = new String[]{from, to};
        jsPostForm("SearchResults", args, vals);
        return getContent();
    }

    public void jsPostForm(String handler, String[] target, String[] argument) throws UnsupportedEncodingException {
        try {
            StringBuilder data = new StringBuilder();
            for (int i = 0; i < target.length; i++) {
                if (i > 0) {
                    data.append("&");
                }
                data.append(URLEncoder.encode(target[i], "UTF-8")).append("=").append(URLEncoder.encode(argument[i], "UTF-8"));
            }

            connection = (HttpURLConnection) CreateConnection(handler,true);

            Map<String, List<String>> header = connection.getRequestProperties();
            OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
            wr.write(data.toString());
            wr.flush();
            wr.close();
            Map<String, List<String>> resp = connection.getHeaderFields();

            if (connection.getResponseCode() / 100 == 3) //than redirect yourself
            {
                handler = connection.getHeaderField("Location").substring(connection.getHeaderField("Location").lastIndexOf("/") + 1).replace(".aspx", "");
                connection = (HttpURLConnection) CreateConnection(handler,false);
                connection.connect();
            }

            cookie = getCookie(connection);
        } catch (IOException ex) {
            Logger.getLogger(DatabaseManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private URLConnection CreateConnection(String handler,boolean isPost) throws IOException {

        HttpURLConnection conn = (HttpURLConnection) new URL("http://bazy.uprp.pl/patentwebaccess/" + handler + ".aspx").openConnection();
        /* conn.setRequestProperty("Accept-Charset", "ISO-8859-2,utf-8;q=0.7,*;q=0.7");

        conn.setRequestProperty("Referer", "http://bazy.uprp.pl/patentwebaccess/DatabaseChoose.aspx");
        conn.setRequestMethod("POST");
        HttpURLConnection.setFollowRedirects(true);
        conn.setDoOutput(true);
        conn.setDoInput(true); */
        // cookie="ASP.NET_SessionId=fevvjf45c0dbaebfrb2mgr55; __utma=194141758.642822942.1329413169.1329413169.1329413169.1; __utmb=194141758.2.10.1329413169; __utmc=194141758; __utmz=194141758.1329413169.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)";
        HttpURLConnection.setFollowRedirects(false);
        conn.setRequestProperty("User-Agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1");
        conn.setRequestProperty("Accept-Charset", charset);
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
        conn.setRequestProperty("Cookie", cookie);
        Map<String, List<String>> mapa = conn.getRequestProperties();
        if(isPost)conn.setDoOutput(true);
        return conn;
    }

    public String getContent() throws IOException {
        BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        Writer zawartosc = new StringWriter();
        int n = 0;
        int i = 0;
        char[] buffer = new char[1024];

        while ((n = rd.read(buffer)) != -1) {
            zawartosc.write(buffer, 0, n);
            i += n;
        }
        connection.getInputStream().close();
        return zawartosc.toString();
    }
}

www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!