在尝试连接到 API、验证用户身份并访问用户详细信息时,用户在使用 Curl 进行身份验证和查看用户详细信息时遇到会话问题。登录成功,但查看用户详细信息会出现 401 未经授权的错误,这表明 Curl 无法有效保留会话 cookie。
问题在于缺少 CURLOPT_COOKIEFILE选项,这对于 Curl 在后续请求中传输保存的 cookie 至关重要。
手册定义了该选项as:
"包含 cookie 数据的文件的名称。cookie 文件可以是 Netscape 格式,或者只是转储到文件中的纯 HTTP 样式标头。如果名称是空字符串,则没有 cookie已加载,但 cookie 处理仍然启用。”
在提供的代码中,cookie jar 用于在请求完成后保存 cookie。但是,如果未设置 CURLOPT_COOKIEFILE,Curl 将无法在将来的请求期间传输任何存储的 cookie。
要解决此问题,请修改代码以包含 CURLOPT_COOKIEFILE 选项:
define("COOKIE_FILE", "cookie.txt"); // Login the user $ch = curl_init('http://api.example.com/login/joe/smith'); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); echo curl_exec ($ch); // Read the session saved in the cookie file echo "<br/><br/>"; $file = fopen("cookie.txt", 'r'); echo fread($file, 100000000); echo "<br/><br/>"; // Get the users details $ch = curl_init('http://api.example.com/user'); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE); // Add the CURLOPT_COOKIEFILE option curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); echo curl_exec ($ch);
通过合并 CURLOPT_COOKIEFILE 选项,Curl 将成功发送为后续请求保存的 cookie,从而消除未经授权的错误并允许访问用户详细信息。
以上是PHP使用curl维护Session Cookie时出现401未经授权错误如何解决?的详细内容。更多信息请关注PHP中文网其他相关文章!