对 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;

当我在 localhost 上执行它时,此代码返回预期结果。

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

我还尝试使用HTTPful库

$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,并向 eg 发送 GET 请求。http://en.gravatar.com/johnslegers.json 服务器上工作得很好。

知道可能导致此问题的原因和/或如何解决吗?

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

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

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

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