powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Synapse. HTTP + запрос методом POST. Не получается.
7 сообщений из 7, страница 1 из 1
Synapse. HTTP + запрос методом POST. Не получается.
    #39537197
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Не получается получить данные от php-скрипта, отправляя ему POST-запрос по https.
Запрос вроде отправляется, т.к. HTTP.resultCode=200 (ОК), но после выполнения запроса почему-то HTTP.Document.Size=0, т.е. возвращает пустоту. А должен вернуть 'ru 12345 - Привет!'
Файлы "libeay32.dll" и "ssleay32.dll", скаченные с сайта synapse, лежат рядом с exe.

Вот код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Uses httpsend;

procedure TForm1.Button1Click(Sender: TObject);
var formData: TStringList;
    HTTP: THTTPSend;
begin
  HTTP:=THTTPSend.Create;
  // готовим параметры
  formData:=TStringList.Create;
  formData.Add('param1=ru');
  formData.Add('param2=12345');
  HTTP.Document.Clear;
  formData.SaveToStream(HTTP.Document);
  formData.free;
  // запускаем запрос
  if HTTP.HTTPMethod('POST', 'https://мой-хост.com/data/test.php') then
    memo1.Lines.LoadFromStream(HTTP.Document);

  HTTP.free;
end;


Содержимое PHP-файла:
Код: php
1.
2.
3.
4.
5.
6.
<?
  $param1 = $_POST['param1'];
  $param2 = $_POST['param2'];
  $rez = param1." ".param2." - Привет!";
  echo $rez; // возвращаем на клиента
?>
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537213
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня закралось подозрение, что HTTPS в Synapse не работает.
Несмотря на то, что в uses присутствует ssl_openssl и libeay32.dll, ssleay32.dll лежат в папке с exe, я ради интереса попробовал удалить libeay32.dll, ssleay32.dll, но ничего не изменилось. Все равно возвращает HTTP.resultCode=200, а в HTTP.Document - пустота.

И непонятно, какую из библиотек использовать в http://synapse.ararat.cz/files/crypt/
Openssl-0.9.7f-Win32.zip
Openssl-0.9.8d-Win32.zip
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537217
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка на пхп. Чтобы ее вернуть, надо включить показ ошибок в самом начале скрипта:
Код: php
1.
2.
ini_set('display_errors','On');
error_reporting('E_ALL');



Она должна показать, что не найден параметр. А это значит, что пхп не распознал формат запроса. Для этого из делфи надо передать еще и заголовок (header) корректный. Либо задавать через параметры формы, а не напрямую:
Код: pascal
1.
2.
3.
   formData := TIdMultiPartFormDataStream.Create;
   formData.AddFormField('param1', 'value1');
   idHTTP1.Post('http://локалхост/winlog.php',formData);



И вообще, надо параметры проверять входные:
Код: php
1.
if(isset($_POST['param1'])
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537224
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этот заголовок нужен, чтобы пхп нормально параметры распарсил:
Код: php
1.
ContentType: application/x-www-form-urlencoded
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537227
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Все равно возвращает HTTP.resultCode=200, а в HTTP.Document - пустота.

приведи что выдает:

Код: pascal
1.
2.
3.
4.
if HTTP.ResultCode=200 then
begin
  memo1.Text :=HTTP.Headers.Text;
end;
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537315
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синапс 100% нормально работает с https
...
Рейтинг: 0 / 0
Synapse. HTTP + запрос методом POST. Не получается.
    #39537327
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я немного прогнал насчет удаления dll. Оказалось, что проект случайно не из той папки открыл... :)

Ну ладно, теперь разобрался.

Tactical Nuclear Penguin, возвращаемый HEADER вот такой:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Tue, 17 Oct 2017 07:22:55 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
X-Powered-By: PHP/7.0.17
Vary: Accept-Encoding
Strict-Transport-Security: max-age=31536000;



Запрос переделал и он заработал.

1) Действительно, HTTP.MimeType:='application/x-www-form-urlencoded'; - это обязательно!!!
2) Параметры формировать надо было в одну строку и разделять из амперсандом &, вот так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.Button1Click(Sender: TObject);
var formData: TStringList;
    HTTP: THTTPSend;
begin
  HTTP:=THTTPSend.Create;
  // готовим параметры
  formData:=TStringStream.Create('');
  formData.WriteString('param1=ru');
  formData.WriteString('¶m2=12345');
  HTTP.Document.LoadFromStream(formData);
  formData.free;
  // запускаем запрос
  if HTTP.HTTPMethod('POST', 'https://мой-хост.com/data/test.php') then
    memo1.Lines.LoadFromStream(HTTP.Document);
  HTTP.free;
end;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Synapse. HTTP + запрос методом POST. Не получается.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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