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();
}
}