Я пытаюсь использовать компоненты Delphi Rest, и я застреваю при загрузке потока. На компонентах Indy, например, мне нужно добавить MultiPartFormDataStream, а в типе содержимого запроса мне нужно установить границу. Но я не могу воспроизвести его на TRESTClient и TRESTRequest. Вот код:Как установить границу множественного запроса с помощью TRestRequest?
//Fields
rCliTest: TRESTClient;
rReqTest: TRESTRequest;
rRespTest: TRESTResponse;
procedure TForm46.btn1Click(Sender: TObject);
var
StreamContent: TMemoryStream;
begin
StreamContent := TMemoryStream.Create;
img1.Picture.Graphic.SaveToStream(StreamContent);
rCliTest.BaseURL := 'http://petstore.swagger.io/v2/pet/33/uploadImage';
rCliTest.ContentType := 'application/json';
rReqTest.Method := TRESTRequestMethod.rmPOST;
rReqTest.AddParameter('additionalMetadata', 'Tets');
rReqTest.AddBody(StreamContent, ctMULTIPART_FORM_DATA);
rReqTest.Execute;
Caption := rRespTest.Content;
end;
Когда я пытаюсь выполнить, я получаю эту ошибку:
{code":400,"type":"unknown","message":"org.jvnet.mimepull.MIMEParsingException: Missing start boundary"}
Это завитки, используемые в качестве основы для реализации кода:
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json'
--header 'Authorization: Bearer 3d9979829200e7cc7e6e6ac039f75e01' -F additionalMetadata=rodrigo
'http://petstore.swagger.io/v2/pet/33/uploadImage'
Обновления:
- В настоящее время я использую Delphi Сиэтл, но раньше я использовал Delphi X5 и в Delphi X5 не представляется возможным направлять поток, как я хочу.
Я попытался создать тот же сценарий, используя PostMan и Advanced Rest Client (ARC, это расширение для google chrome). На PostMan я мог бы заставить его работать, но на ARC я не мог. Чтобы проверить, что было отправлено на мой RestApi, я использую Fiddler from Telerik, это своего рода проводка, но для RestClients. Есть информация, которую я получил от Скрипач из: Почтальон Запрос
(который работал):
Если я использую код Delphi, как это, я получаю сообщение об ошибке 415 :
Но если изменить формат запроса на multipart_form_data, я получаю эта ошибка и этот выход:
400
{"code":400,"type":"unknown","message":"org.jvnet.mimepull.MIMEParsingException: Missing start boundary"}
Инди 'TIdMultiPartFormDataStream' генерирует случайное граница. 'TIdHTTP.Post()' извлекает эту границу и помещает ее в заголовок 'Content-Type' для вас. –
'rCliTest.ContentType: = 'application/json';' неверно. Это должно быть '' multipart/form-data''. Вы не отправляете сообщение JSON. –