PHP忽略初始202

时间:2018-02-16 00:01:19

标签: javascript php ajax guzzle

我正在编写PHP API客户端,API编写的是ASP.net(C#)。

我可以使用此Javascript函数正确访问数据:

    $.ajax({
    type: "POST",
    url: "https://www.eastmidlandstrains.co.uk/services/LiveTrainInfoService.svc/GetLiveBoardJson",
    data: JSON.stringify({
        request: {
            OriginText: "Derby",
            DestText: "Nottingham",
            Departures: true
        }
    }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processdata: true,
    success: function (result) {
        console.log(JSON.parse(result.d));
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log('Error: ', errorThrown);
    }
});

我正在尝试使用Guzzle在PHP中复制此请求。到目前为止,我已经走到了这一步:

class EMTClient
{
    const EMT_API_URL = "https://www.eastmidlandstrains.co.uk/services/LiveTrainInfoService.svc/GetLiveBoardJson";

    /**
     * @param string $startLocation
     * @param string $endLocation
     * @return mixed
     */
    public function getJourneys(string $startLocation, string $endLocation)
    {
        $client = new GuzzleHttp\Client();

        $request = new GuzzleHttp\Psr7\Request('POST', self::EMT_API_URL, [
            'json' => json_encode([
                'request' => [
                    'OriginText' => $startLocation,
                    'DestText' => $endLocation,
                    'Departures' => true
                ]
            ]),
            'allow_redirects' => false
        ]);
        $promise = $client->sendAsync($request)->then(function ($response) {
            var_dump($response->getBody());
            return $response;
        });
        $promise->wait();

        return $promise->getBody();
    }
}

唯一的问题是此API在处理响应之前返回初始202 Accepted响应并返回数据,而PHP版本正在捕获此202并返回null的响应。

这个JS函数运行完美,但我需要PHP版本,我也使用作曲家,所以我可以包含任何PHP库。

1 个答案:

答案 0 :(得分:1)

在我看来,一个版本将设置略有不同的标题,而另一个则不是。

您应该检查服务器期望的标头,然后看看为PHP和JS生成了哪些标头,您应该确保这些标头匹配。

这是两个相同请求失败的最明显原因。