Многостраничный HTTP-пост для Android

Здравствуйте, у меня есть часть веб-сайта, описанная ниже:

<div id="insertA">
    <form class="MultiFile-intercepted" enctype="multipart/form-data"
        method="post" onsubmit="return checkAnomalyFields();"
        action="dodajN.html">
        <table style="border-weight: 0px">
            <tbody>
                <tr>
                <tr>
                    <td id="wybory"><select id="typ" onchange="typeSelected()" size="1"
                        name="typuId">
                    </td>
                    <td>
                </tr>
                <tr>
                    <td>Szerokość: <input id="szer" type="text" onchange="setMarker()"
                        value="" name="szer">
                        <div id="szerErr" class="err">Proszę podać szerokość na terenie
                            Polski (49-55).</div>
                    </td>
                    <td>Długość: <input id="dlug" type="text" onchange="setMarker()"
                        value="" name="dlug">
                        <div id="dlugErr" class="err">Proszę podać długość na terenie
                            Polski (14-25).</div> <input id="id" type="hidden" value=""
                        name="id">
                    </td>
                </tr>

Я хочу сделать запрос HTTP POST для отправки данных от моего клиента и помещения их в формы. Я делаю это следующим образом:

try {
    HttpClient client = new MyHttpClient(Send.this);  
    String postURL = "url";
    HttpPost post = new HttpPost(postURL); 
    //FileBody bin = new FileBody(file);
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
    //reqEntity.addPart("myFile", bin);
    reqEntity.addPart("typuId", new StringBody("1"));
    reqEntity.addPart("statusuId", new StringBody("2"));
    reqEntity.addPart("szer", new StringBody("52.321911"));
    reqEntity.addPart("dlug", new StringBody("19.464111000000003"));
    reqEntity.addPart("opis",  new StringBody("jakis opis"));

    post.setEntity(reqEntity);  
    HttpResponse response = client.execute(post);  
    HttpEntity resEntity = response.getEntity();  
    AlertDialog.Builder alert=new AlertDialog.Builder(Send.this);
    alert.setTitle("Niepoprawne dane").setMessage(EntityUtils.toString(resEntity)).setNeutralButton("OK", null).show();

    if (resEntity != null) {    
        Log.i("RESPONSE",EntityUtils.toString(resEntity));
    }
} catch (Exception e) {
    e.printStackTrace();
}

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


person Mithrand1r    schedule 23.10.2012    source источник
comment
я не вижу в этом проблемы. вы звоните на веб-сайт, а не на веб-сервис. результат сообщения должен быть удобной для пользователя html-страницей, а не загадочным кодом ответа. вы можете попытаться понять, что такое возвращенный html.   -  person njzk2    schedule 23.10.2012
comment
njzk2 так вы говорите, что сервер не обрабатывает мой запрос должным образом?   -  person Mithrand1r    schedule 23.10.2012
comment
нет. Я говорю, что вы неправильно обрабатываете ответ сервера. это html-страница, которую он должен вернуть, и вам решать, правильно ли это.   -  person njzk2    schedule 23.10.2012
comment
проблема в том, что похоже, что я не публикую (нажимаю кнопку отправки), а запрашиваю только содержимое страницы.. я просто не могу понять, почему   -  person Mithrand1r    schedule 23.10.2012
comment
вы публикуете. попробуйте получить содержимое результата, сохраните его в html-файле и просмотрите.   -  person njzk2    schedule 23.10.2012
comment
я получаю точно такую ​​же форму, которую я отправлял, без данных, которые я поместил в MultipartEntity   -  person Mithrand1r    schedule 23.10.2012
comment
я предполагаю, что вы публикуете на dodajN.html   -  person njzk2    schedule 23.10.2012
comment
на самом деле нет никакой разницы между размещением в dodajN.html или в новом, в обоих случаях я получаю одинаковый ответ   -  person Mithrand1r    schedule 23.10.2012


Ответы (2)


Вы отправляете файл .html. Как правило, серверы не настроены на обработку этих файлов как сценариев, что означает, что отправляемые вами данные просто игнорируются и сбрасываются. Чтобы обработать отправку формы, вы должны отправить сценарий или другую программу, специально предназначенную для обработки этой отправки, например. php-скрипт.

person Marc B    schedule 23.10.2012
comment
на самом деле это своего рода блог, и я хочу иметь возможность сделать еще одну запись на клиенте. я запрашиваю сайт, который выглядит как blog.jsp?action=new - person Mithrand1r; 23.10.2012
comment
тогда что такое action="dodajN.html"? - person Marc B; 23.10.2012
comment
после теста в моем случае нет никакой разницы, если я использую url=someurl/blogjsp?action=new или url=someurl/blogjsp?action=dodajN.html, я немного запутался прямо сейчас - person Mithrand1r; 23.10.2012

Хорошо, поясню, что сказал Марк Б.: action="dodajN.html" почти наверняка неверно. Я никогда не видел веб-сервера, который позволял бы вам это делать (конечно, все возможно). Вероятно, это должно быть action="cgi-bin/something" или что-то в этом роде.

Однако на самом деле это не так важно, поскольку ваше приложение в любом случае не использует предложение action, а скорее записывает «url», что еще более неправильно. Если бы вы сказали нам, по какому адресу вы на самом деле пишете, это могло бы помочь.

Но, в конечном счете, способ отладки заключается в том, чтобы просмотреть журналы сервера и посмотреть, что происходит на этом конце.

Как правило, когда я разрабатываю что-то подобное, я сначала пишу серверный cgi-скрипт и веб-страницу для его использования. Как только мой API работает через веб-страницу, только тогда я начинаю пытаться вызывать скрипт cgi из приложения для Android.

Мой процесс отладки состоит из: 1) Чтения журналов сервера. 2) Мои сценарии cgi пишут свои собственные журналы отладки. 3) Мое приложение для Android сбрасывает код ответа и заголовки в logcat.

person Edward Falk    schedule 23.10.2012