powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка POST-запроса, отправленного из моей программы
16 сообщений из 16, страница 1 из 1
Обработка POST-запроса, отправленного из моей программы
    #38217837
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть php-файл и программа, написанная на Delphi. Требуется из программы POST-запросом передать данные в php-скрипт, который в свою очередь добавит данные в базу данных. Для начала решил попробовать сохранить полученные данные в файл. Вот как я это делаю:

Код: php
1.
2.
3.
4.
5.
$param = $_GET['param'];
	
$fd = fopen("text.txt", "w");
fwrite($fd, $param);
fclose($fd);



На 90% уверен что дело не в моей программе на Delphi, т.к. до этого использовал ее совместно с MediaWiki API (там тоже POST-запрос использовал) - то там все работало. Поэтому больше склоняюсь к тому, что проблема в коде PHP-скрипта. Что здесь не так?

P.S. через адресную строку браузера всё работает, поэтому может быть другой подход нужен.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38217842
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
POST-запросом
$param = $_GET['param'];
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38218098
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
через адресную строку браузера всё работает
Если через браузер работает URL типа http://myserver.loc/myscript.php?param=test и в файл производится запись, проблема не в PHP. Покажите POST-запрос, который отправляется дельфями.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38218314
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$param = $_REQUEST['param'];
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38218932
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow, я же так и делаю (код выше).
ShSerge, пробовал - тот же результат.

mhx, вот код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var
  ToServer: TStrings;
  Response: TStringStream;
begin
  ToServer := TStringList.Create;
  Response := TStringStream.Create('');

  ToServer.Add('param=my parameter');
  ToServer.Add('text=this is text');

  IdHTTP.HandleRedirects := True;
  IdHTTP.Post('http://www.test/index.php',ToServer,Response);
  Response.SaveToFile(ExtractFilePath(Application.ExeName)+'post-result.txt');
  
  ToServer.Free;
  Response.Free;
end;
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38219367
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался сам. Оказывается, если в PHP-скрипте для получения значения параметра используется $_GET, то и в программе нужно использовать метод Get, если же $_POST - то и в программе Post. Я почему-то думал, что моя программа делает Post, как бы посылая инфу на сайт, а скрипт получая эту инфу должен использовать $_GET.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38219374
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge, прошу прощения, Вы были правы. Ваш вариант тоже работает.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38219665
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Ваш вариант тоже работает
Это неудивительно. Массив $_REQUEST содержит массивы $_GET, $_POST, $_COOKIE.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Обработка POST-запроса, отправленного из моей программы
    #38985115
Yauhen_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Проблема следующая:
Из приложения Delphi отправляю запрос POST.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TF_Pic.SendPost(Sender: TObject);
var str: TStringList;
    responce: TStringStream;
    url, result: string;
begin
    url:='http://www.xxxxxxxx.xxx/cd_adv.php';
    str:=TStringList.Create;
    responce:=TStringStream.Create('');
    str.Add('id=my_id');
    str.Add('in=p_bp');
    str.Add('to_page=somepage');
    F_Main.IdHTTP1.Post(url, str, responce);
    ShowMessage(responce.DataString);
    FreeAndNil(responce);
    FreeAndNil(str);
end;


Запрос POST стартует, и параметры POST отображаются в окне HTTPAnalyzer'а, как должно.
Скрипт на сервере этот запрос получает и делает запись в БД.
НО!
Значения параметров при этом не считываются скриптом.
Вот начало скрипта:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
<?php
$user_id=$_REQUEST['id'];								
$user_in=$_REQUEST['in'];								
$to_page=$_REQUEST['to_page'];							
echo "user_id=".$user_id." user_in=".$user_in." to_page=".$to_page;
...
//далее эти три параметра записываются в таблицу БД
?>


То есть, браузером отображаются только имена переменных, а значения — пустые.
Если ввести всё это вручную в адресной строке браузера, то всё работает нормально. Значения отображаются на экране и пишутся в таблицу базы.

В чем проблема, подскажите, мудрые головы. Моя уже не соображайт.
Где теряются значения параметров?
Сам-то запрос из приложения Delphi передается. Без него бы не активировался скрипт и не создавалась бы запись в таблице БД.

_
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38985258
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yauhen_m,

массив $_POST заполняется, только когда вы отправляете данные через форму или же эмулируете ее с помощью header:'Content-Type: application/x-www-form-urlencoded'. Массив $_GET, когда передаете данные через url.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38985378
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте var_dump($_POST)
и результат не в showmessage а в тексторое поле, memo и т.п. также не помешает проверить полностью получаемый header
kunaksergey
'Content-Type: application/x-www-form-urlencoded' - не обязательно, достаточно того что известен content-lengh и request-method
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38986828
Yauhen_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergeyYauhen_m,

массив $_POST заполняется, только когда вы отправляете данные через форму или же эмулируете ее с помощью header:'Content-Type: application/x-www-form-urlencoded'.
Мил-человек, если нетрудно, в двух словах, как это пристегнуть к моему коду.
Это реально через IDHTTP? Примеров не нашел.
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38986912
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yauhen_mkunaksergeyYauhen_m,

массив $_POST заполняется, только когда вы отправляете данные через форму или же эмулируете ее с помощью header:'Content-Type: application/x-www-form-urlencoded'.
Мил-человек, если нетрудно, в двух словах, как это пристегнуть к моему коду.
Это реально через IDHTTP? Примеров не нашел.это он сам должен прикручивать в хеадер, лучше посмотри что и как твой запрос видит сервер
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38986955
Yauhen_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re_qas,
var_dump($_POST) возвращает пустой массив array {0}

Как проверить хедер?
А лучше скажи, как эмулировать форму?
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38987013
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я то у себя делаю через REST
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
json := tjsonobject.Create;
   json.AddPair('method','INSERT');
   json.AddPair('table',LowerCase(table));
   for i := 0 to form1.DBGrid1.DataSource.DataSet.Fields.Count-1 do
      begin
        json.AddPair(form1.DBGrid1.DataSource.DataSet.Fields.Fields[i].FieldName,form1.DBGrid1.DataSource.DataSet.Fields.Fields[i].AsString);
      end;
   form1.RESTRequest1.Params.Clear;
   form1.RESTRequest1.Params.AddItem('data',json.ToJSON,pkGETorPOST);
   form1.RESTRequest1.Execute;
   j:=j+1;
   //if j=1000 then break;
   
   form1.label3.Caption := inttostr(j);
   //form1.ProgressBar1.Position :=j;
   form1.Memo1.Lines.Add(form1.RESTResponse1.Content);
...
Рейтинг: 0 / 0
Обработка POST-запроса, отправленного из моей программы
    #38987031
Yauhen_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подсказки, разобрался.
Нужно было всего несколько строк:

Код: pascal
1.
2.
3.
4.
5.
6.
with idHTTP2.Request do
    begin
    UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.13014 YaBrowser/13.12.1599.13014 Safari/537.36'; //тут не понял, что нужно реально писать, взял из примера — работает 
        ContentType:='application/x-www-form-urlencoded';
        Connection:='keep-alive';
    end;



Теперь всё передается, принимается и записывается.
Всем откликнувшимся спасибо!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка POST-запроса, отправленного из моей программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]