0

次の PHP コードを使用して、基本的な HTTP 要求を Microsoft Dynamics NAV 2016 の Odata Web サービスに送信しようとしています。

$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 が有効になっており、GET リクエストを送信します。http://en.gravatar.com/johnslegers.jsonはサーバー上で問題なく動作します。

これを引き起こす可能性のあるもの、および/またはそれを修正する方法はありますか?

4

1 に答える 1

0

問題の原因を検出しました:

  • Microsoft Dynamics NAV 2016 の Odata Web サービスは、ポート 1103 を使用します。
  • ポート 80、443、25、および 110 は、サービスを呼び出そうとしているサーバーで開いている唯一のポートです。

Microsoft Dynamics プロバイダーが使用しているポートを変更することも、Web ホスティング プロバイダーがこのポートを開くこともできません。

上司と話し合った結果、Web ホスティングを、柔軟性が高く、ポート 1103 をブロックしない別のプロバイダーに移行することに同意しました。

于 2016-03-04T17:45:50.357 に答える