php curl - 使用 http 身份验证访问 url(需要帮助)

Posted

技术标签:

【中文标题】php curl - 使用 http 身份验证访问 url(需要帮助)【英文标题】:php curl - accessing url with http authentication (need help) 【发布时间】:2012-06-03 06:42:25 【问题描述】:

我在 HTTP 身份验证中遇到问题。我无法获取此 url 的内容,因为它需要 http auth。

代码:

<?php

$url = "http://www.abcdefg.com/12345/";

$username = 'username';
$password = 'password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$out = curl_exec($ch);

print "error:" . curl_error($ch) . "<br />";
print "output:" . $out . "<br /><br />";

curl_close($ch);

?>

问题是: 它不显示真实内容,而是显示“302 Found,文档已移至此处。”

我试过“http://username:password@www.abcdefg.com/12345/”,还是不行。

当访问这个 url(1) 时,会弹出一个窗口询问用户名和密码。但弹出窗口来自另一个 url(2)(一个 sso 身份验证服务器)。如果通过认证。然后它再次回到 url(1)。这时候我就可以访问到这个url(1)的内容了。

我使用 firebug 通过直接从浏览器访问 url 得到以下消息:

第 1 步

URL: GET http://www.abcdefg.com/12345/
Status: 302 Found
Protocol: http

第 2 步

URL: GET https://www.ssoauth.com/obrareq.cgi?wh=xxx wu=xxx wo=xxx rh=http://www.abcdefg.com ru=/12345/
Status: 302 Redirect
Protocol: https

第 3 步

URL: GET http://www.abcdefg.com/obrar.cgi?cookie=xxxxxxxxxxxxxxx
Status: 302 Found
Protocol: http

第 4 步

URL: GET http://www.abcdefg.com/12345/
Status: 200 OK
Protocol: http

然后显示内容……

这和cookie有关吗? 如何使用 php curl 读取内容?

【问题讨论】:

【参考方案1】:

你必须设置:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

这将使 cURL 服从 302 并生成额外的请求。

【讨论】:

我刚刚添加了 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) 但它显示“第 32 行解析错误” 第 32 行是: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);我需要添加与https相关的东西吗?因为在 Step 2 中,它使用带有端口 443 的 https。 我忘记了行尾的; curl_error($ch) 出现错误:最多 (20) 次重定向后跟随 -----仍然没有输出。 哇!!添加后它终于起作用了: curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookies.txt'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

以上是关于php curl - 使用 http 身份验证访问 url(需要帮助)的主要内容,如果未能解决你的问题,请参考以下文章

在标头php curl中发送身份验证

使用 curl 使用摘要测试基本 http 身份验证

使用 HTTP-Basic 身份验证发出 HTTP GET 请求

在 PHP 中访问 HTTP 身份验证用户名?

为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?

HTTP 基本身份验证 - 预期的 Web 浏览器体验是啥?