我正在编写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库。
答案 0 :(得分:1)
在我看来,一个版本将设置略有不同的标题,而另一个则不是。
您应该检查服务器期望的标头,然后看看为PHP和JS生成了哪些标头,您应该确保这些标头匹配。
这是两个相同请求失败的最明显原因。