Как прочитать полезную нагрузку AS2 (EDI — RFC 4130) с помощью PHP?

Я пытаюсь реализовать клиент AS2 в PHP. Я использую PHP7 за http-сервером NGinx.

Если я могу получить доступ к заголовкам (версия AS2 и т. Д.), Я не могу получить доступ к полезной нагрузке HTTP с помощью file_get_contents (‘pĥp: // input’). Эта инструкция возвращает строку нулевой длины.

Любая идея, пожалуйста? Смотрите источники ниже.

Например, позвоните HTTP: //localhost/send.php файл = AS2PlainText.txt возвращает:

Send AS2PlainText.txt
-----------------------
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Fri, 17 Nov 2017 15:54:23 GMT
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Connection: close

14b
---HEADER---
HTTP_CONTENT_TYPE => Application/EDI-X12
HTTP_AS2_FROM => FromCompanyXYZ
HTTP_AS2_TO => ToCompanyABC
HTTP_AS2_VERSION => 1.0
HTTP_MESSAGE_ID => [email protected]
HTTP_USER_AGENT => AS2 Company Server
HTTP_CONNECTION => close
HTTP_HOST => localhost
---BODY---
string(0) ""---END---

0

Интересно, не будет ли это связано с удалением NGinx? Connection: close из send.php возвращает тот же вывод, что и выше (исключено HTTP_CONNECTION, конечно), плюс второй HTTP / 1.1 запрос:

[...]
HTTP_USER_AGENT => AS2 Company Server
HTTP_HOST => localhost
---BODY---
string(0) ""---END---

0

HTTP/1.1 400 Bad Request
Server: nginx/1.10.3 (Ubuntu)
Date: Fri, 17 Nov 2017 16:07:06 GMT
Content-Type: text/html
Content-Length: 182
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.10.3 (Ubuntu)</center>
</body>
</html>

ИСТОЧНИКИ

send.php

<?php
header('Content-type: text/plain');
echo "Send {$_GET['file']}\r\n";
echo "-----------------------\r\n";

$fp = fsockopen('127.0.0.1', 80);
fwrite($fp, "POST /echo.php HTTP/1.1\r\n");
fwrite($fp, "Host: localhost\r\n");
fwrite($fp, "Connection: close\r\n");
fwrite($fp, file_get_contents($_GET['file']) . "\r\n");
fwrite($fp, "\r\n");

while (!feof($fp)) {
echo fgets($fp, 1024);
}

echo.php

<?php
header('Content-type: text/plain');
echo "---HEADER---\r\n";
foreach (array_filter(
$_SERVER,
function($k) {
return (substr($k,0,5) == 'HTTP_');
},
ARRAY_FILTER_USE_KEY
) as $key => $value) {
echo "$key => $value\n";
}

echo "---BODY---\r\n";
var_dump(file_get_contents('php://input'));
echo "---END---\r\n";

AS2PlainText.txt

User-Agent: AS2 Company Server
Message-ID: [email protected]
AS2-Version: 1.0
AS2-To: ToCompanyABC
AS2-From: FromCompanyXYZ
Content-Type: Application/EDI-X12

ISA*00*          *00*          *ZZ*SENDERISA      *14*0073268795005
*960807*1548*U*00401*000000020*0*T*>~
GS*PO*SENDERGS*007326879*19960807*1548*1*X*004010~
ST*850*000000001~
BEG*00*SA*A99999-01**19971207~
REF*VR*54321~
ITD*01*3*1**15**16~
DTM*002*19971219~
N1*BT*BUYSNACKS INC.*9*1223334444~
N3*P.O. BOX 0000~
N4*TEMPLE*TX*76503~
N1*ST*BUYSNACKS PORT*9*1223334445~
N3*1000 N. SAMPLE HIGHWAY~
N4*ATHENS*GA*30603~
N1*VN*FOODSELLER*9*12345QQQQ~
N3*P.O. BOX 222222~
N4*DALLAS*TX*723224444~
PO1**16*CA*12.34**CB*000111111*UA*002840022222~
PID*F****CRUNCHY CHIPS LSS~
PO4*48*7.89*LB~
PO1**13*CA*12.34**CB*000555555*UA*002840033333~
PID*F****NACHO CHIPS LSS~
PO4*48*8.9*LB~
CTT*7~
SE*22*000000001~
GE*1*1~
IEA*1*000000020~

1

Решение

Нашел проблему: отсутствует Content-Length в заголовках HTTP-запроса …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]