首页 > 解决方案 > 如何从 Soap 请求中获取传输编码的分块字节响应?

问题描述

我在 Laravel 项目中使用 Laravel SOAP 客户端(https://github.com/CodeDredd/laravel-soap)。

下面给出的网络服务有几个功能。 https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsesya?wsdl

我可以从他们中的大多数人那里获取数据。只有一个函数以字节格式返回 pdf 文件。当我尝试阅读响应时,我只得到一个空白数据。当我使用 SoapUI 时,它会将 pdf 文件返回给我。但是在 PHP 中它不能以某种方式工作。

例如,此代码毫无问题地返回数据。

public function getSupplyCarryTypes(Request $request)
{
    $response = Soap::baseWsdl('https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsesya?wsdl')
        ->withBasicAuth('999999', '999999testtest')
        ->withOptions([
            'trace' => false,
            'encoding' => 'UTF-8',
            'cache_wsdl' => WSDL_CACHE_NONE,
        ])
        ->call('paramTehlikeliMaddeTasimaSekli',array(
            'wsuser' => array('kullaniciAdi' => '999999', 'sifre' => '999999testtest')));

    dd($response['return']['tehlikeliMaddeTasimaSekliListesi']);
}

但是当我尝试这个时,它返回null。它通常以字节形式返回 PDF 文件。至少它在 SoapUI 中运行良好。在检查 SoapUI 中的原始代码后,我发现唯一的区别是“传输编码:分块”。

public function getVoyageReport() // Not Working
{
    $response = Soap::baseWsdl('https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsesya?wsdl')
        ->withBasicAuth('999999', '999999testtest')
        ->withOptions([
            'trace' => false,
            'encoding' => 'UTF-8',
            'cache_wsdl' => WSDL_CACHE_NONE,
        ])
        ->call('seferRaporuV3', array(
            'wsuser' => array('kullaniciAdi' => '999999', 'sifre' => '999999testtest'),
            'seferId' => '21042300246027'));

    return $response->body();
}

如果有人在这方面帮助我,我会非常高兴。谢谢。

标签: phplaravelsoapchunked-encodingtransfer-encoding

解决方案


推荐阅读