对 Odata Web 服务的简单 HTTP 请求在本地主机上工作正常,但在服务器上失败

Simple HTTP request to Odata web service works fine on localhost, but fails on server

我正在尝试使用以下 PHP 代码向 Microsoft Dynamics NAV 2016 中的 Odata Web 服务发送基本 HTTP 请求:

$url = 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'1\')';
$credentials = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $credentials);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json'
]);
$output = curl_exec($ch);
curl_close($ch);

echo $output;

这段代码 returns 我在 localhost 上执行它时的预期结果。

但是,当我在我的服务器上执行相同的代码时,浏览器一直在等待响应直到超时。

我也试过使用 the HTTPful library :

$url = 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'1\')';

$response = \Httpful\Request::get($url)
    ->sendsJson()
    ->authenticateWith('user', 'password')
    ->addHeaders([
        'Accept' => 'application/json',
        'Content-Type' => 'application/json'
    ])->send();

echo json_encode($response->body, JSON_PRETTY_PRINT);

结果相同。

localhost 和服务器都使用 PHP5.5 并启用了 cURL,并向例如发送 GET 请求。 http://en.gravatar.com/johnslegers.json 在服务器上工作正常。

知道是什么原因造成的and/or如何解决?

我已经检测到问题的原因:

  • Microsoft Dynamics NAV 2016 中的 Odata Web 服务使用端口 1103
  • 端口 80、443、25 和 110 是我尝试调用服务的服务器上唯一打开的端口

我们的 Microsoft Dynamics 提供商无法更改他们正在使用的端口,我们的网络托管提供商也无法为我们打开此端口。

在与我的老板讨论后,我们同意将我们的网络托管转移到另一个提供我们更大灵活性且不会阻止端口 1103 的提供商。