HttpClient POST не может отправить форму + результирующая строка обрезается (не полностью) - PullRequest
0 голосов
/ 30 апреля 2010

Я пишу приложение, чтобы проверить расписание автобусов. Поэтому мне нужно опубликовать некоторые данные на html-странице, отправить их и проанализировать полученную страницу с помощью htmlparser.

Хотя об этом можно спросить много, может кто-нибудь помочь мне определить, 1) эта страница поддерживает пост / получить (я думаю, что это так) 2) какие поля мне нужно использовать? 3) Как сделать актуальный запрос?

пока это мой код:

String url = "http://busspur02.aseag.de/bs.exe?Cmd=RV&Karten=true&DatumT=30&DatumM=4&DatumJ=2010&ZeitH=&ZeitM=&Suchen=%28S%29uchen&GT0=&HT0=&GT1=&HT1=";
            String charset = "CP1252";
            System.out.println("startFrom: "+start_from);
            System.out.println("goTo: "+destination);

            //String tag.v

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("HTO", start_from));
            params.add(new BasicNameValuePair("HT1", destination));
            params.add(new BasicNameValuePair("GTO", "Aachen"));
            params.add(new BasicNameValuePair("GT1", "Aachen"));
            params.add(new BasicNameValuePair("DatumT", day));
            params.add(new BasicNameValuePair("DatumM", month));
            params.add(new BasicNameValuePair("DatumJ", year));
            params.add(new BasicNameValuePair("ZeitH", hour));
            params.add(new BasicNameValuePair("ZeitM", min));

            UrlEncodedFormEntity query = new UrlEncodedFormEntity(params, charset);

            HttpPost post = new HttpPost(url);
            post.setEntity(query);
            InputStream response = new DefaultHttpClient().execute(post).getEntity().getContent();

            // Now do your thing with the facebook response.
            String source = readText(response,"CP1252");
            Log.d(TAG_AVV,response.toString());
            System.out.println("STREAM "+source);

EDIT:
Это мой новый код:

try {
            HttpClient client = new DefaultHttpClient();  
            String getURL = "http://busspur02.aseag.de/bs.exe?SID=5FC39&ScreenX=1440&ScreenY=900&CMD=CR&Karten=true&DatumT="+day+"&DatumM="+month+"&DatumJ="+year+"&ZeitH="+hour+"&ZeitM="+min+"&Intervall=60&Suchen=(S)uchen&GT0=Aachen&T0=H&HT0="+start_from+"&GT1=Aachen&T0=H&HT1="+destination+"";
            HttpGet get = new HttpGet(getURL);
            HttpResponse responseGet = client.execute(get);  
            HttpEntity resEntityGet = responseGet.getEntity();  
            if (resEntityGet != null) {  
                //do something with the response
                Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }   

Но выходной файл обрезан. Если я делаю один и тот же запрос в браузере, я получаю 14 разных маршрутов. Теперь файл внезапно останавливается, и я получаю только 3 маршрута .... что не так?

Я решил последнюю проблему с обрезанной строкой: нажмите здесь, чтобы увидеть мое решение

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010
String url = "http://busspur02.aseag.de/bs.exe?Cmd=RV&Karten=true&DatumT=30&DatumM=4&DatumJ=2010&ZeitH=&ZeitM=&Suchen=%28S%29uchen&GT0=&HT0=&GT1=&HT1=";

Эта форма отправляется GET. Вы также должны представить GET. Вам также нужно собрать как можно больше полей ввода (<input>, <select>, <textarea>, <button> и т. Д., А также поля type="hidden"!) Из источника HTML и указать их в качестве параметров вашего запроса. , Распространенной вещью, которая упускается из виду при такой автоматической отправке форм, является пара имя / значение кнопка отправки .

Вот этот:

<input TYPE="Submit" accesskey="s" class="SuchenBtn" name="Suchen" tabindex="20" VALUE="(S)uchen">

Вам необходимо добавить как минимум Suchen=(S)uchen в строку запроса. Это единственный способ для серверной стороны выяснить, была ли нажата какая-либо кнопка отправки и, если да, то какая из них, чтобы она могла предпринять соответствующие действия.

1 голос
/ 30 апреля 2010

Гутен Тэг!

В следующей выдержке:

<td class="Start3"> 
          <input type="text" name="GT0" value="" tabindex="1" />
</td

"class = start3" инструктирует браузер определенным образом форматировать таблицу antry. Что вас интересует, так это "& GT0 = ваш текстовый фрагмент по URL" GET ", сгенерированному из этой формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...