我正在嘗試使用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'
更新:
- 目前我正在使用德爾福西雅圖,但以前我使用的是 德爾福X5和德爾福X5是不可能發送像我想要的 流。
我試圖使用PostMan和Advanced Rest Client(ARC,它是一個谷歌瀏覽器擴展)創建相同的場景。在PostMan上我可以使它工作,但在ARC上我不能。要檢查發送給我的RestApi的東西,我使用Fiddler from Telerik,這是一種wireshark,但對於RestClients。 有,我從提琴手得到了來自信息:
郵遞員請求(即工作):
如果我使用德爾福這樣的代碼,我得到錯誤415 :
但如果我更改請求格式multipart_form_data,我得到這個錯誤,此輸出:
400
{"code":400,"type":"unknown","message":"org.jvnet.mimepull.MIMEParsingException: Missing start boundary"}
Indy的'TIdMultiPartFormDataStream'生成一個隨機邊界。 'TIdHTTP.Post()'檢索該邊界並將其放入Content-Type頭中。 –
'rCliTest.ContentType:='application/json';'是錯誤的。它應該是「multipart/form-data」。你沒有發送JSON文章。 –