denblackstache
@denblackstache
Rock'n'roll Engineer

Как исправить ошибку отправки XML файла посредством HTTP POST запроса?

Имеется REST API для выгрузки данных на сторонний сервис (интеграция) посредством HTTP POST запроса через форму multipart/form-data.

Общая структура три поля: логин, пароль и прикрепляемый файл данных.
При построении и тестировании запроса в приложении Postman (либо через тот же Curl), все ок, когда файл прикрепляется через интерфейс приложения. Получаю 200 код и валидный ответ.

Но когда я пытаюсь построить тот же самый запрос в приложении php (либо тот же raw в Postman/Curl), то получаю 500 ошибку от сервера, из-за того, что он не может считать файл из http запроса.

Пример запроса:

POST /223/integration/integration/upload HTTP/1.1
Host: 127.0.0.1:223
Connection: Keep-Alive
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryp7MA4YWxkTrZu0gW
    
----WebKitFormBoundaryp7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="login"
  
mylogin
----WebKitFormBoundaryp7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="password"
    
mypassword
----WebKitFormBoundaryp7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="document"; filename="purchaseNotice.xml"
Content-Type: text/xml
    
<?xml version="1.0" encoding="UTF-8"?> <purchaseProtocolPAAE xmlns="http://zakupki.gov.ru/223fz/purchase/1" xmlns:t="http://zakupki.gov.ru/223fz/types/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://zakupki.gov.ru/223/integration/schema/TFF-2.0/purchase.xsd"> <t:header><t:guid>06adddd4-c7cc-4a5f-a667-7dd3f311bec9</t:guid><t:createDateTime>2013-12-19T16:43:51</t:createDateTime></t:header> <body><item><t:guid>a99d3960-2be6-4baf-aae6-69a4074bd0ec</t:guid><purchaseProtocolPAAEData><guid>e8274477-52e7-4088-9b47-96ae26e93280</guid><createDateTime>2013-12-19T14:49:38</createDateTime><purchaseInfo><t:purchaseNoticeNumber>12345678902</t:purchaseNoticeNumber></purchaseInfo><placer><t:mainInfo><t:inn>3905088712</t:inn><t:kpp>390601001</t:kpp><t:ogrn>1083905000080</t:ogrn></t:mainInfo></placer><customer><t:mainInfo><t:inn>3905088712</t:inn><t:kpp>390601001</t:kpp><t:ogrn>1083905000080</t:ogrn></t:mainInfo></customer><auctionStartDate>2013-12-19T16:40:00</auctionStartDate><auctionEndDate>2013-12-19T16:43:50</auctionEndDate><protocolRZ1Requisites><t:registrationNumber>12345678901-12</t:registrationNumber><t:version>1</t:version></protocolRZ1Requisites><lotApplicationsList><protocolLotApplications><lot><guid>9f36d9bd-3d87-4894-814a-87d295e9a542</guid><ordinalNumber>1</ordinalNumber><subject>Предмет нефтяного договора</subject><initialSumInfo>123.00 руб.</initialSumInfo></lot><lotParameters><nonPrice>0</nonPrice></lotParameters><application><applicationNumber>1</applicationNumber></application><application><applicationNumber>2</applicationNumber></application></protocolLotApplications></lotApplicationsList></purchaseProtocolPAAEData></item></body> </purchaseProtocolPAAE>
----WebKitFormBoundaryp7MA4YWxkTrZu0gW


Непонятно, в чем проблема такого способа прикрепления файла. Неверный Content-Type или еще что?

P. S. На header «Host» просьба не обращать внимание, я использую демон stunnel, чтобы данные шифровались и подписывались ЭП при передаче через TLS.
  • Вопрос задан
  • 3668 просмотров
Решения вопроса 1
denblackstache
@denblackstache Автор вопроса
Rock'n'roll Engineer
Всем спасибо, проблема оказалась во-первых в отсутствии дополнительных «--» в boundary, во-вторых в том, что line break в приложении конвертился из \r\n в \n
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maxaon
@maxaon
Точно у вас потом host меняется?
Возможно серверу необходимы какие-либо другие заголовки (Content-Lengh, Origin и др)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Искра Екатеринбург
от 80 000 до 100 000 ₽
Art gorka Санкт-Петербург
от 60 000 ₽
от 40 000 до 60 000 ₽