HttpClient do CEIDG

0

Witam!

Aktualnie rozwiązuje problem który polega na przesłaniu metodą POST danych do wyszukiwarki CEIDG ( https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx# )

Pobranie strony i jej parsowanie jest proste za pomoca JSoup. Lecz schody zaczynają się w metodzie POST i tym co ona zwraca. Jest to dla mnie nie jasne. Jeśli ktoś doświadczony mógłby mnie naprostować byłbym wdzieczny.

 // tworzymy obikt klijenta
            DefaultHttpClient httpclient = new DefaultHttpClient();
        	try {
// tworzymy zapytanie do storny
            HttpGet httpget = new HttpGet("https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx");
// wywołujemy (wpisanie w przegladarke adresu ^^ 
            HttpResponse response = httpclient.execute(httpget);
            ResponseHandler<String> handler = new BasicResponseHandler();
// Pobiermy źródło strony
            String body = handler.handleResponse(response);
            
            Document doc = Jsoup.parse(body);
// Parsujemy strone i wyciagamy CAPTHA
            Element captha = doc.getElementById( "MainContent_ctrlCaptcha" );
            String capthaString = captha.attr("src");
            capthaString = capthaString.substring(0, capthaString.length()-7 );
            String linkToCaptha = "https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/"+capthaString;
            System.out.println( linkToCaptha );
//Pobieramy CAPTHA z internetu i wyswietlamy
            BufferedImage img = ImageIO.read(new URL(linkToCaptha));
            
            JFrame frame = new JFrame("a");
            frame.getContentPane().add(new JLabel(new ImageIcon(img)));
            frame.setSize(300, 300);
            frame.setAlwaysOnTop(true);
            frame.show(); 

// Wyswietlamy status połączenia: zazwyczaj HTTP/1.1 200 OK
System.out.println("Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);

//Tworzymy Metode post gdzie wypoalniamy FORME
Response res = Request.Post("https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx")
                    .bodyForm(Form.form()
                    .add("ctl00$MainContent$txtNip",  "")
                    .add("ctl00$MainContent$txtPartnershipNIP",  "")
                    .add("ctl00$MainContent$txtKrs",  "")
                    .add("ctl00$MainContent$txtFirstName",  "")
                    .add("ctl00$MainContent$txtProvince",  "")
                    .add("ctl00$MainContent$txtCity",  "")
                    .add("ctl00$MainContent$txtStreet",  "")
                    .add("ctl00$MainContent$txtLocalNumber",  "")
                    .add("ctl00$MainContent$txtDateOfCessationOfBusinessActivity",  "")
                    .add("ctl00$MainContent$cbIsArchival",  "")
                    .add("ctl00$MainContent$tbCaptcha",  capthaToProcess)
                    .add("ctl00$MainContent$txtRegon",  "")
                    .add("ctl00$MainContent$txtPartnershipREGON",  "")
                    .add("ctl00$MainContent$txtLastName",  "Janic")                    
                    .add("ctl00$MainContent$tbCaptcha", capthaToProcess).build())
                    .execute();

// Pobieramy źródło odpowiedzi
            response =  res.returnResponse();
            body = handler.handleResponse(response);

// Wyswitlamy status 
            System.out.println("Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);   
            
            
            System.out.println( body );

I co należy zrobić dalej? Czy ktoś może mi z tym pomóc?
Czy można przesłać nie pełną formę??

0

pewnie dostaniesz błąd walidacji. Aplikacje w ASP są paskudne do crawlowania.

Ja używam CasperJS / PhantomJS - zobacz czy nie będzie Ci tak łatwiej.

A do przepisywania obrazków jest dostępna usługa:
http://ceidg.azurewebsites.net

1 użytkowników online, w tym zalogowanych: 0, gości: 1