Web サービスの「getToken」エンドポイントへの curl リクエストをデバッグしようとしています。
URL と認証情報が curl ハンドルに正しく書き込まれていると 100% 確信できるわけではありません。
送信されたリクエストをキャプチャするために使用しようとしてcurl_getinfo($ch, CURLINFO_HEADER_OUT);
いますが、あまり情報が得られません。実際の curl リクエストがどのように見えるかについて、より詳細な診断を取得する方法はありますか?
コードは次のとおりです。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HEADER, 1); // just getting header to see if we got an auth token
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); // capture the header info
curl_setopt($ch, CURLOPT_VERBOSE, 1); // turn verbose on
// execute the curl request
$rh = fopen("request.txt", "w"); // open request file handle
$verbose = fopen('php://temp', 'rw+');
curl_setopt($ch, CURLOPT_STDERR, $verbose);
curl_exec($ch); // execute request
$sent_request = curl_getinfo($ch, CURLINFO_HEADER_OUT);
fwrite($rh, $sent_request); // save the request info
fclose($rh);
!rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";
これはすべて機能しますが、毎回 401 を返します。API 管理者は、私が持っているユーザー名/パスが正しいことを保証します。
どういうわけか URL 値が間違っているのか、正しいユーザー名/パスを送信していないのか疑問に思っていましたが、この情報は保存されたリクエスト データに出力されません。
HEAD /export/auth HTTP/1.1
Authorization: Basic Y2FpcmRzdW5mYTpENWlAaVM4cw==
Host: webservices.mycompany.com
Accept: */*
ユーザー名/パスが記録されていないことがわかります (セキュリティのためだと思います)。エンドポイント URL は、値に値host
の開始点を加えたものだと思います。HEAD
webservices.mycompany.com/export/auth
「Verbose Information」ステートメントは何も出力しません。これも理由がわからない!
手伝ってくれてありがとう。
編集: Phpから詳細モードを追加-コメンター immulatin のおかげでCurl をデバッグ