gpt4 book ai didi

php - 如何获取有关已发送 PHP curl 请求的信息

转载 作者:IT王子 更新时间:2023-10-29 00:00:57 25 4
gpt4 key购买 nike

我正在尝试调试对网络服务“getToken”端点的 curl 请求。

我不能 100% 确信 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?

“详细信息”语句不打印任何内容。也不知道为什么!

感谢您的帮助。

编辑:从 Php - Debugging Curl 添加详细模式感谢评论者 immulatin

最佳答案

如果将 CURLINFO_HEADER_OUT 设置为 true,传出 header 在 curl_getinfo() 返回的数组中可用,位于 request_header键:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://foo.com/bar");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "someusername:secretpassword");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

curl_exec($ch);

$info = curl_getinfo($ch);
print_r($info['request_header']);

这将打印:

GET /bar HTTP/1.1
Authorization: Basic c29tZXVzZXJuYW1lOnNlY3JldHBhc3N3b3Jk
Host: foo.com
Accept: */*

注意授权细节是 base64 编码的:

echo base64_decode('c29tZXVzZXJuYW1lOnNlY3JldHBhc3N3b3Jk');
// prints: someusername:secretpassword

另请注意,用户名和密码需要进行百分比编码以转义任何 URL 保留字符(/?&: 等等)它们可能包含:

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

关于php - 如何获取有关已发送 PHP curl 请求的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com