Программно POST для ASP типа WEBPAGE - PullRequest
0 голосов
/ 21 июля 2011

До сих пор я работаю над HttpURLConnection и setRequestProperty в течение 2 дней, и я не могу заставить эту веб-страницу опубликовать и вернуть нужную мне страницу. Это то, что я до сих пор ...

... Строковые данные = URLEncoder.encode ("acctno", "UTF-8") + "=" + URLEncoder.encode ("1991462", "UTF-8");

    URL oracle = new URL("http://taxinquiry.princegeorgescountymd.gov");
    HttpURLConnection yc = (HttpURLConnection) oracle.openConnection();
    yc.setRequestMethod("POST");

    yc.setRequestProperty("Content-Type", "text/html; charset=utf-8");
    yc.setRequestProperty("Content-Length", "19004");
    yc.setRequestProperty("Cache-Control", "private");
    yc.setRequestProperty("Set-Cookie", "ASP.NET_SessionId=v5rdm145zv3jm545kdslgz55; path=/");
    yc.setRequestProperty("X-AspNet-Version", "1.1.4322");
    yc.setRequestProperty("X-Powered-By", "ASP.NET");
    yc.setRequestProperty("Server", "Microsoft-IIS/6.0");

    yc.setDoOutput(true);
    yc.setDoInput(true);

    OutputStreamWriter out = new OutputStreamWriter(yc.getOutputStream());

    out.write(data);
    out.flush();
    //out.write(data);
    out.close();
    ...

Возвращает ту же страницу, определенную в URL. он не отправляет мне запрошенную страницу, которая должна иметь окончание /taxsummary.aspx

Похоже, что asp берет данные поста и генерирует HTML, уникальный для каждого заданного параметра. Как мне дать ему правильные параметры?

1 Ответ

2 голосов
/ 21 июля 2011

Ваш код выглядит нормально.Я считаю, что он отправляет POST правильно.Я думаю, что проблема не здесь.Когда вы используете браузер, вы сначала выполняете как минимум один HTTP GET, чтобы попасть в форму.Когда вы делаете это, сервер создает для вас HTTP-сессию и возвращает свой идентификатор в заголовке ответа Set-Cookie.Когда вы отправляете форму с помощью браузера, он отправляет этот заголовок (Cookie) обратно, чтобы сервер мог идентифицировать сеанс.

Когда вы работаете с Java, вы пропускаете первый этап (HTTP GET).Итак, первое, что вы делаете, это POST, пока у вас еще нет сессии.Я не знаю, какова логика этой страницы ASP, но я думаю, что она просто отклоняет такие запросы.

Итак, сначала проверьте это предположение.Вы можете использовать плагин для Firefox с именем LiveHttpHeaders.Установите его и выполните операцию вручную.Вы увидите все HTTP-запросы и ответы.Спаси их.Убедитесь, что идентификатор сеанса отправляется обратно с сервера на клиент.Теперь реализуйте то же самое в Java.

Кстати, часто ситуация усложняется, когда сервер отправляет несколько ответов на перенаправление.В этом случае вы должны следовать им.HttpConnection имеет метод setFollowRedirects ().Назовите это с параметром true.

BTW2: Apache HttpClient является идеальной заменой HttpConnection.он делает все и очень рекомендуется при реализации таких задач.

Вот и все.Удачи.Иногда это не легко ...

...