1

パートナーが cURL を使用してサーバーからアクセスする必要がある最初の API を作成しています。そのため、サーバー #1 を使用してテスト接続スクリプトを作成し、サーバー #2 を使用して API をホストしています。サーバー#1には次のものがあります:

<?php

$url = "http://example.net/api/";

$data['api_key'] = "AFsASfafasasf";
$data['api_secret'] = "faskakfokfl3a";

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

$result = curl_exec($ch);
curl_close($ch);

echo $result;

?>

サーバー #2 の API ファイルには、これがあります (接続をテストするためだけに):

<?php

echo "Testing API...";
echo $_POST['api_key'];
echo $_POST['api_secret'];

?>

問題は、サーバー #1 でテスト スクリプトを実行すると、次のようになることです。

"認証が必要です

このサーバーは、要求されたドキュメントへのアクセスが許可されていることを確認できませんでした。入力した認証情報が間違っている (パスワードが間違っているなど) か、必要な認証情報を入力する方法をブラウザーが認識していません。

さらに、ErrorDocument を使用して要求を処理しようとしたときに、401 Authorization Required エラーが発生しました。」

サーバー #1 は他の基本的な PHP スクリプトで動作するため、これは間違いなく cURL に接続されています。

私がオンラインで見たすべての例は承認を必要としないようです...それで、設定する必要があるCURLOPTフィールドに何かありますか、それとも.htaccessまたはどこかに欠けているものがありますか?

ありがとう!

4

2 に答える 2

4

401 エラーは、サーバーが Web ページにアクセスするために何らかの認証を必要とする場合に発生します。ほとんどの場合、それは基本認証です。

サーバー #1 で基本認証が設定されているか確認していただけますか? サーバー #1 が基本認証を必要とする場合、ブラウザーは最初にそれを要求し、次に資格情報を保存して、後続のすべての要求でそれを渡します。

基本認証が構成されている場合、以下は cURL を使用して資格情報を渡します

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);

于 2013-03-26T10:59:26.673 に答える
0

API を実行していたのと同じサーバーで cURL コマンドを実行しようとすると、同じエラーが発生しました。

最終的に、httpd.conf の仮想ホスト設定は、127.0.0.1 ではなく、単一のゲートウェイ IP 用に設定されていることがわかりました。

したがって、Apache を想定すると、サーバー #2 が #1 の apache 設定と競合する方法でサーバー #1 を呼び出している可能性が高いと思います。

  1. サーバー #2 の /etc/hosts ファイルをチェックして、サーバー #1 を内部 IP で直接呼び出しているのか、それともデフォルトで単に LAN の外部に送信しているのかを確認します。

  2. サーバー #1 の httpd.conf 設定を確認します。具体的には、ドメインを解決するときに NameVirtualHost と VirtualHost が構成されている IP アドレスを確認します。サーバー #2 の呼び出し元の IP アドレスを許可するように構成する必要があります。

于 2015-10-05T03:50:06.943 に答える