Если добавляю любые символы, в aPost.Add('login":user@cloud.by'); -не важно что внутри Add, даже хотя бы один символ , то получаю ответ в Response: HTTP/1.1 400 Bad request
Конечно, ведь если отправлять какие-то произвольные значения серверу, то сервер их не поймёт и выдаст сообщение о том, что запрос неправильный, что и происходит в Вашем случае (400 Bad request). Запрос нужно посылать строго в том формате, который требует сервер, никаких лишних символов в нём быть не должно.
Если делаю зарос без строчки aPost.Add(' '); то получаю ответ в Response: HTTP/1.1 401 Unauthorized
Тоже верно, ведь теперь Вы не посылали никаких непонятных серверу данных и ошибки "Bad request" не произошло. Но при этом Вы и не авторизовались, о чём и говорит сервер сообщением "401 Unauthorized".
aPost.Add('login":user@cloud.by');
В этом запросе пропущена двойная кавычка в самом начале, очевидно что он не будет правильно распознан сервером. Возможно правильный формат такой: aPost.Add('"login":user@cloud.by');
, это если сервер требует именно такой формат, сначала имя параметра в кавычках, затем двоеточие, затем значение параметра.
Если делать просто GET запрос типа 'http://127.0.0.1/a.php?log=user@cloud.by&pass=123456', то ответ от сервера такой:
{"name":"Exception","message":"Неверный email или пароль.","code":0,"status":401,"type":"customException","error_status":1}
Это уже больше похоже на рабочую версию запроса, т.к. сервер дал понятный ответ "Неверный email или пароль". Вы точно уверены в том что указали верный e-mail и пароль? Также обратите внимание, что в этом GET запросе Вы передаёте логин как параметр с именем "log", но в других местах Вы пишете "login", а также "pas" и "password". Ваш сервер допускает оба варианта "log" / "login", "pas" / "password"? Или всё таки какой-то один вариант. Если сервер требует имя параметра "login", то указывайте именно так, т.е.:
http://127.0.0.1/a.php?login=user@cloud.by&password=123456Вообще, как-нибудь возможно "подсмотреть" что отправляется в запросе aHTTP.Post и в каком виде?
Можно попробовать снимать трафик через Wireshark или подобное ПО, но зачем, если ответы сервера дают нужную информацию, как описано выше.
{
"login":"user@cloud.by",
"password":"123456"
}
Это JSON-формат запроса, его обычно передают через TStringStream, который мы не выносили в скрипты, но можем добавить в будущем (обычно для JSON также указывают ContentType как json). Сейчас можно попробовать и напрямую:
var
aHTTP: TM_HTTP;
aPOST: TM_HTTPPost;
begin
aPost := TM_HTTPPost.Create; // создаем данные для отправки
aPost.Add('{"login":"user@cloud.by","password":"123456"}'); // добавляем данные
aHTTP := RequestHTTP; // создаем экземпляр запроса
aHTTP.SetHeader('ContentType', 'application/json');
aHTTP.Post('http://127.0.0.1/a.php', aPost); // вызываем POST
end.
По API мне после заголовка нужно отправлять...
Если у Вас есть описание API, то дайте нам ссылку на него (можно выслать на
support@simple-scada.com), тогда было бы понятно какие запросы требует сервер и вышеописанные вопросы решатся сами собой.