如何在来自 HAPI-FHIR 客户端的 POST 请求上用 PHP 编写 HTTP 响应

问题描述 投票:0回答:1

主要问题是我向客户端发送的 HTTP 响应会导致客户端出现异常:“(MessageId: ID: on ExchangeId: <..>) 的传递失败。catch: ca.uhn.fhir.rest。 client.exceptions.FhirClientConnectionException:HAPI-1359:对 URL 执行 POST 时无法解析服务器的响应“。还有一个 DataFormatException:“HAPI-1861:无法解析 JSON 编码的 FHIR 内容:HAPI-1857:没有找到任何要解析的内容”。因此,客户端通过每小时左右重新发送相同的消息(捆绑包)来进行无休止的重试。

我在 PHP 应用程序中编写的内容是:

            $_http_status_line = "HTTP/1.1 201 Created "; 
    $_date_string = make_date_string_reponse($_debug_level); 
            $_general_header = $_date_string . "; ";  
            $_etag_header = "ETag: W/\"1\"; "; 
            $_location_header = "Location: https://<some.url>/; "; 
            $_response_header = $_etag_header . " " . $_location_header . " "; 
    $_last_modified_date_string = make_date_string_reponse($_debug_level); 
            $_content_type_header = "Content-Type: application/fhir+json;charset=utf-8; "; 
            $_last_modified_header = "Last-Modified: {$_last_modified_date_string}; "; 
            $_entity_header = $_content_type_header . $_last_modified_header . " "; 
            $_http_header = $_general_header . $_response_header . $_entity_header . "\n" ; 
            $_http_response = $_http_status_line . $_http_header;   
            header($_http_response); 

这段代码生成以下 HTTP 响应:

HTTP/1.1 201 创建于 2023 年 12 月 12 日星期二 04:54:37 GMT; ETag:W/“1”;地点:https:///;内容类型:application/fhir+json;charset=utf-8;最后修改时间:2023 年 12 月 12 日星期二 04:54:37 GMT;

客户端认为现在没有标头可供解析并生成异常,因此重试消息。我所期望的是标头到达客户端并且不会进行重试。

我现在的问题是:这是否是在 PHP 中编码 HTTP 响应的正确方法?

提前致谢。亲切的问候,永远。

php rest http-headers hapi-fhir
1个回答
0
投票

HTTP 标头应格式化为

key: value
对,每个以换行符 (
\n
) 结尾。您当前将标头连接成单个字符串,然后使用
header()
一次将其全部发送的方法可能无法正确分隔标头,这很可能是客户抱怨的原因。

© www.soinside.com 2019 - 2024. All rights reserved.