Перейти к содержанию
Fire Monkey от А до Я
  • 0

Не удаётся выполнить post запрос


Ethernet

Вопрос

Доброго вам времени суток, уважаемые форумчане.
Столкнулся с проблемой нажатия на кнопку сайта.

Инструментарий:

Delphi XE7 --> FM;

Indy 10.6.0.5169 --> idHTTP

 

Свойства idHTTP1:
CookieManager  | IdCookieManager1
AllowCookies      | True
HandleRedirects | True

 

Процедура в разрабатываемом приложении:

procedure SelenaURL.SendData(Captcha: string);
var
  i: Integer;
  Text: String;
begin
  try
    Params := TStringList.Create;
    Params.Add('title=' + fMain.eTitle.Text);
    Params.Add('cat_id=121');
    case fMain.cbCategory.ItemIndex of
      0: Params.Add('pred=1');
      1: Params.Add('pred=2');
    end;
    Params.Add('price=' + fMain.eCost.Text);
    Params.Add('currency=1');
    case fMain.cbCity.ItemIndex of
      0: Params.Add('city_id=1');
      1: Params.Add('city_id=2');
      2: Params.Add('city_id=3');
      3: Params.Add('city_id=4');
      4: Params.Add('city_id=5');
    end;
    Text := fMain.mText.Lines[0];
    for i := 1 to fMain.mText.Lines.Count - 1 do
      Text := Text + #13#10 + fMain.mText.Lines[i];
    Params.Add('description=' + Text);
    Params.Add('name_from=' + fMain.eName.Text);
    Params.Add('email_from=' + fMain.eMail.Text);
    Params.Add('phone_from=' + fMain.ePhone.Text);
    for i := 1 to fMain.ListBox2.Count do
      Params.Add('photo_' + IntToStr(i) + '=' + fMain.ListBox2.Items[i - 1]);
    Params.Add('period=30');
    Params.Add('captcha=' + Captcha);
    Params.Add('submit=Добавить объявление'); // Что с ним, что без него запрос не уходит
    Response := fMain.IdHTTP1.Post(aURL, Params);
    fMain.mText.Lines.Clear;
    fMain.mText.Text := Response; // Тут можно увидеть, что переадресации никакой не было. Где стояли, там и стоим
  finally
    Params.Free;
  end;
end;

Код самой кнопки:

<input class="buttom" onclick="addForm(document.getElementById('f'))" value="Добавить объявление" type="submit">

Код процедуры, выполняемая кнопкой:

/* Подгружаем форму - добавить объявление */
function addForm(value) {
 
 form_result = document.getElementById('ajax_result');
 form_indicator = document.getElementById('ajax_indicator');
 
        form_result.className = 'ajaxform-result-hide';
        form_indicator.innerHTML = '<img src="'+AJAX_DIR+'templates/default/images/indicator.gif">';
        form_indicator.className = 'ajaxform-indicator';
 
        JsHttpRequest.query(
            AJAX_DIR+'ajax.php?act=add',
            {
                q: value
 
            },
            function(result, errors) {
                form_result.innerHTML = '';
 
                if (result['q']) {
 
                        form_result.innerHTML = '<div class="ajaxform-result"><fieldset class="fieldset_error"><legend class="legend_error">Ошибка:</legend>'+result['q']+'</fieldset></div>';
                        form_result.className = '';
                        form_indicator.innerHTML = '';
                        document.getElementById("ajax_form").style.display = 'block';
 
                    }else{
 
                        if(result['action'] == '3') {
                          form_result.innerHTML = '<div class="ajaxform-result"><fieldset class="fieldset_msg"><legend class="legend_msg">Сообщение:</legend><div class="msg">Ваше объявление было отправлено на проверку. <a href="'+AJAX_DIR+'">Перейти на главную страницу</a>.<br><br>Ваши данные: <br><b>ID:</b> '+result['id']+' <br><b>Пароль:</b> '+result['password']+'</div></fieldset>';
                        }else{
                          form_result.innerHTML = '<div class="ajaxform-result"><fieldset class="fieldset_msg"><legend class="legend_msg">Сообщение:</legend><div class="msg">Ваше объявление "<b>ID'+result['id']+'</b>" было успешно добавлено. <a href="'+AJAX_DIR+''+result['id']+'.html">Перейти к объявлению</a>.<br><br>Ваши данные: <br><b>ID:</b> '+result['id']+' <br><b>Пароль:</b> '+result['password']+'</div></fieldset>';
                        }
 
                        form_result.className = '';
                        form_indicator.innerHTML = '';
                        document.getElementById("ajax_form").style.display = 'none';
                    }
            },
            false  // не кэшировать
        );
}
/* конец */

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

Буду рад любой вашей помощи. Спасибо!

Изменено пользователем Ethernet
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

ты настройки компонента совсем не делаешь как же он передаст данные то. поищи в инете примеры POST запроса.

 

на вскиду попробуй добавь строки до вызова POST

 

 

fMain.IdHTTP1.Request.BasicAuthentication:=true; (может и false)
fMain.IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';

Изменено пользователем haword
Ссылка на комментарий
  • 0

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

Ссылка на комментарий
  • 0

havord, спасибо за ответ.

Забыл добавить в продемонстрированный фрагмент:

with fMain.IdHTTP1 do
  begin
    Request.Host := '10.1.3.1';
    Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0';
    Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    Request.AcceptLanguage := 'ru,en-us;q=0.7,en;q=0.3';
    Request.AcceptCharSet := 'windows-1251,utf-8;q=0.7,*;q=0.7';
  end;

Так же дописал предложенные Вами варианты:

with fMain.IdHTTP1 do
begin
  Request.BasicAuthentication := False; // Так же пробовал и True
  Request.ContentType := 'application/x-www-form-urlencoded';
end;

Но результат всё тот же. Запрос не уходит. :(

 

xenon54, удалил полностью фрагмет кода html страницы. Надеюсь Вас это устроит.

Изменено пользователем Ethernet
Ссылка на комментарий
  • 0

Не уходит или не доходит ? При такой разработке необходимо первым делом обзавестись сниффером. Это как минимум. И где точное содержание переменной aURL ?

 

В общем мой совет: Firefox + HTTP сниффер. Заходите на сайт, нажимаете CTRL+SHIFT+F2. Заполняете все поля и подаёте объявление. Там будет всё. Что, откуда и куда... В Вашем коде можно глаз сломать...

Изменено пользователем Nix0N
Ссылка на комментарий
  • 0

Вообще тут нужно по шагам искать.

Я для себя написал такую штуку:

function log_all_requests()
{
	ob_start();
	var_dump($_GET);
	$output = ob_get_clean();
	file_put_contents("log_all_requests.txt", "+++++actions.php++++" . "\r\n", FILE_APPEND);
	file_put_contents("log_all_requests.txt", "[GET]" . "\r\n", FILE_APPEND);
	file_put_contents("log_all_requests.txt", $output . "\r\n\r\n", FILE_APPEND);
	
	ob_start();
	var_dump($_POST);
	$output = ob_get_clean();
	file_put_contents("log_all_requests.txt", "[POST]" . "\r\n", FILE_APPEND);
	file_put_contents("log_all_requests.txt", $output . "\r\n\r\n", FILE_APPEND);
	
	ob_start();
	var_dump($_SESSION);
	$output = ob_get_clean();
	file_put_contents("log_all_requests.txt", "[SESSION]" . "\r\n", FILE_APPEND);
	file_put_contents("log_all_requests.txt", $output . "\r\n\r\n", FILE_APPEND);
	
	file_put_contents("log_all_requests.txt", "--------------------" . "\r\n\r\n", FILE_APPEND);
	
	
	
	return false;
}

Как минимум так вы сможете увидеть точно, приходит ли запрос на сервер.

И я соглашусь с haword'ом, покажите 

Response := fMain.IdHTTP1.Post(aURL, Params);

aURL какой вписываете? 

 

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

Изменено пользователем xenon54
Ссылка на комментарий
  • 0
Response := fMain.IdHTTP1.Post(aURL, Params);

aURL какой вписываете?

 

10.1.3.1".

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

 

В большинстве случаев, POST-запросы обрабатывает функция, которая не вернет Вам front-end... Так что "зайти" не получится...

Изменено пользователем Nix0N
Ссылка на комментарий
  • 0

Можно пульнуть POST без параметров и посмотреть, придет ли контент. Я так понял у автора вопрос именно про то что вообще запросы не проходят, а не какой-то конкретный случай. А если всетаки какой-то конкретный случай запросов рассматривается, тот тут FireMonkey ну прям совсем не пахнет...

Ссылка на комментарий
  • 0

Автор - адрес сайта в студию ! Я посмотрю что и куда должно поступить...

 

P.S. TIdHTTP с Ajax не очень-то сговорчив...

Изменено пользователем Nix0N
Ссылка на комментарий
  • 0

Nix0N и xenon54, большое спасибо за ответы.

aURL = 'http://10.1.3.1/board/add.html';

На сайт под таким URL спокойно вхожу и забираю капчу GETом.

Сам сайт:

http://10.1.3.1/board/

или

http://ymym.ru/board/

Но сомневаюсь, что Вы сможете на него зайти.

 

Как раз проблема в том, что запрос вообще не уходит.

Изменено пользователем Ethernet
Ссылка на комментарий
  • 0

Судя по всему сайт вам подконтролен. Гет запрос проходит? Попробуйте воспользоваться функцией которую я выше написал, она как минимум покажет доходит ли действительно запрос до сервера или нет. Не может быть что запрос не уходит. Попробуйте запрос на любой доступный сайт в инете, вернет ли контент. Если нет,э то смотрите разрешения, мб у вас не разрешено приложению отправлять/получать данные. Не поймите меня не правильно, но вы говорите что запрос не уходит, а это нужно подтвердить фактами, иначе это только предположение.

Ссылка на комментарий
  • 0

Вот что мне дало приложение Tamper Data:

Уходящая переменная "POST_DATA":

-----------------------------14523881525560\r\nContent-Disposition: form-data; name="title"\r\n\r\nÒåñòîâîå ñîîáùåíèå\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="cat_id"\r\n\r\n121\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="pred"\r\n\r\n1\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="price"\r\n\r\n1000\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="currency"\r\n\r\n1\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="city_id"\r\n\r\n2\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="description"\r\n\r\nÒåñòîâîå ñîîáùåíèå îòïðàâëåííîå ñ ïðèëîæåíèÿ "AnnMess"\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="name_from"\r\n\r\nAnnMess\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="email_from"\r\n\r\noo.prof@bk.ru\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="phone_from"\r\n\r\n+7(012)345-67-89\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="url"\r\n\r\n\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="photo_1"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="photo_2"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="photo_3"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="photo_4"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="period"\r\n\r\n30\r\n-----------------------------14523881525560\r\nContent-Disposition: form-data; name="captcha"\r\n\r\n959231\r\n-----------------------------14523881525560--\r\n

Но проблема всё та же, с приложения post - запрос не уходит. Но GET работает прекрасно.

Возможно это из-за аякса, не знаю.

Может я что-то не так делаю? Уже голова с этим сайтом кругом идёт.

Может так же заполнять "PARAMS" как и "POST_DATA"?

 

"А воз и нынче там" (с)

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...