HTTP/1.1 400 Неверный запрос Delphi VCL XE6

Мне нужно отправить по почте строку URL-адреса текста JSON, я использую компонент TidHTTP для отправки по почте, как показано в приведенном ниже коде, но когда я нажимаю кнопку отправки, я пропускаю эту ошибку, я искал в Google другой люди, что это происходит, но ни одно из решений не помогло мне в этом случае.

var
postData:String;
url:String;
contestacion:String;
datosPOst:TStringList;
lista:TMemoryStream;
begin
datosPOst:=TStringList.Create;
datosPOst.Text:='{'+#10+'"ticketCode": "asdasd",'+#10+
'"CIF": "***",'+#10+
'"storeCode": "***",'+#10+
'"saleTimeStamp": "\/Date(123456000000)\/",'+#10+
'"email": "prueba@***",'+#10+
'"userCP": "30280",'+#10+
'"products": ['+#10+
'{'+#10+
'"Amount": 1,'+#10+
'"Description": "PRUEBA ticket",'+#10+
'"Name": "Prueba ticket 2",'+#10+
'"Price": 25.25,'+#10+
'"ProductCode": "50",'+#10+
'"Tax": 21,'+#10+
'"UnitPrice": 250.00'+#10+
'}'+#10+
'],'+#10+
'"user": "****",'+#10+
'"password": "****"'+#10+
'}';
lista:=TMemoryStream.Create;
datosPOst.SaveToStream(lista);
contestacion:=conexion.Post('http://****.com/Ticket.svc/rest/InsertTicket',lista);

Также, если есть какой-либо способ сформировать json из delphi, также был бы признателен

Спасибо


person Lluis Bernabeu    schedule 03.10.2014    source источник
comment
@whosrdaddy, это не дубликат, вопрос, который вы связали, касается помещения его в список строк, где необходим поток. Речь идет о 400 bad-запросах и о том, что в этом случае idHTTP не вернет вам тело, которое вам нужно.   -  person Pieter B    schedule 03.10.2014
comment
Вам не хватает запятой после пользователя, должно быть '"user": "****",'+#10+   -  person David A    schedule 03.10.2014
comment
проблема не в запятой   -  person Lluis Bernabeu    schedule 03.10.2014
comment
Вы можете использовать библиотеку с открытым исходным кодом SuperObject для создания JSON из Delphi.   -  person mjn    schedule 04.10.2014


Ответы (2)


Теперь у меня есть решение:

conexion.Request.ContentType:='application/json';

И работает

person Lluis Bernabeu    schedule 03.10.2014

Ошибка 400 — это ответ, который вы получаете, когда в вашем JSON есть ошибки.

Я бы посоветовал использовать другой компонент для отправки вашего запроса POST, компонент, который возвращает вам основной текст, потому что это то, что вам нужно.

Synapse имеет альтернативу idHTTP.

person Pieter B    schedule 03.10.2014
comment
Текст ответа вы можете получить из свойства EIdHTTPProtocolException.ErrorMessage. Я бы не советовал использовать другую библиотеку. - person TLama; 03.10.2014
comment
Вы получаете ответ об ошибке, а не тело, это две разные вещи. Я получаю ответ об ошибке: [объект JSON не может быть декодирован], но он не показывает действительно полезную информацию: {user: [Invalid user]} - person Pieter B; 03.10.2014
comment
@PieterB, можете ли вы включить полный ответ HTTP, чтобы проиллюстрировать, где в ответе находятся две разные вещи? - person mjn; 03.10.2014
comment
Я могу подтвердить, что EIdHTTPProtocolException.ErrorMessage действительно содержит тело ответа HTTP. Текст ответа HTTP (Bad Request) находится в формате EIdHTTPProtocolException.Message. - person Remy Lebeau; 03.10.2014