Версия: Delphi 10.4
Доброго, давно не работал с Delphi, да и раньше ни разу не пытался даже работать с внешними PHP запросами и тем более JSON.
не работает отправка, через NetHTTPClient компонент. Точнее странно, смотрел возвращаемую строку , говорит "ОК", полагаю, что проблем на стороне Delphi не возникло, тогда что-то неправильно на стороне PHP получается? Не могу понять, не получается разобраться. В PHP всегда массив $_POST пустой, на проверке "$_POST[json]" не установлен даже.
Delphi -код, отправка через POST тестово выглядит так (статус текст "ОК"). Это текущий код, я уже перепробовал разные способы и без Params (а значение переменной заносил напрямую в POST, только Source задействовал. В общем, в любом случае результат один и тот же.
Код:
var
NetHTTPClient : TNetHTTPClient;
params,jsonbuf : TStringStream;
json: TJSONObject;
jsonstr: string;
r : IHTTPResponse;
begin
NetHTTPClient := TNetHTTPClient.Create(nil);
try
NetHTTPClient.ContentType := 'application/json; charset=utf-8';
//NetHTTPClient.AcceptEncoding := ;
NetHTTPClient.AcceptCharSet := 'UTF-8';
NetHTTPClient.OnValidateServerCertificate := OnNetHTTPClientValidateServerCertificate;
json := TJSONObject.Create;
json.AddPair('Name1','Value1');
json.AddPair('Name2','Value2');
json.AddPair('Name3','Value3');
jsonstr := json.ToJSON;
jsonbuf := TStringStream.Create(jsonstr, TEncoding.UTF8);
params := TStringStream.Create('json=true&s=test');
try
//r := NetHTTPClient.Post('https://'+WWW_HOST, jsonbuf,params);
Result := NetHTTPClient.Post('https://'+WWW_HOST+'/?json=true&s=test', jsonbuf).ContentAsString(TEncoding.UTF8);
//Result := r.StatusText; - возвращает "OK"
//memo1.Lines.Clear;
//memo1.Lines.Add('Response: '+Result);
//memo1.lines.Add('JSON-String:'+jsonstr);
finally
params.Free;
jsonbuf.Free;
FreeAndNil(json);
end;
finally
NetHTTPClient.Free;
end;
end;
PHP - обработчик выглядит так:
PHP код:
// print_r($_POST); - проверял, пустой от приложения приходит.
if isset($_POST['json']) { //&& $_POST['json'] = true - при любой
header('Content-type: application/json');
$gc = file_get_contents('php://input',true);
$data = json_decode($gc);
$filename = _BASEDIR_'/json.txt';
file_put_contents($filename, $data); // сохраняем в файл для проверки
}
Смотрел примеры и видел схожие проблемы , чаще с упоминанием idHTTP, что-то там рекомендации не помогли.