我正在尝试调试一个针对webservice 'getToken'端点的curl请求。
我不太确定URL和身份验证信息是否被正确地写入了curl句柄中。
我尝试使用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
?
“详细信息”语句没有输出。我也不确定为什么!
谢谢帮助。
编辑:根据评论者immulatin提供的Php - Debugging Curl添加了详细模式。