PHP cURL SSL中的基本授权


PHP cURL Basic authorisation in SSL

我正在尝试使用cURL获取SSL ASPX页面的内容,下面是我的代码:

$ourFileName = "cookieFIle.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fclose($ourFileHandle);
function curl_get($url) {
    $ch = curl_init();
    $options = array(
        CURLOPT_HEADER => 1,
        CURLOPT_URL => $url,
        CURLOPT_USERPWD => 'XXX:XXX',
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HTTPAUTH => CURLAUTH_ANY,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13',
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_COOKIESESSION, true,
        CURLOPT_COOKIEFILE, "cookieFIle.txt",
        CURLOPT_COOKIEJAR, "cookieFIle.txt"
    );
    curl_setopt_array($ch, $options);
    $return = curl_exec($ch);
    curl_close($ch);
    return $return;
}

echo curl_get('https://somepage.com/intranet/loginprocess.aspx');

每当我执行代码时,我都会收到这个:

标题:

HTTP/1.1 401 Unauthorized
Content-Length: 1656
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-UA-Compatible: IE=EmulateIE8
Date: Sat, 16 Nov 2013 19:05:18 GMT

消息:

You are not authorized to view this page
You do not have permission to view this directory or page using the credentials that you supplied because your Web browser is sending a WWW-Authenticate header field that the Web server is not configured to accept.

登录名和密码是100%正确的,url也是。OpenSSL安装在我使用的RaspverryPI上,cURL在php.ini 中启用

授权完成后,loginprocess.aspx会将您重定向到studentthome.aspx,但我认为问题出在授权本身。

您正在尝试使用基本身份验证进行连接,而服务器正在请求集成windows身份验证(NTLM)。

使用选项CURLAUTH_NTLM。

你不应该将cookiesession设置为true。来自手册:

TRUE将其标记为新的cookie"会话"。它将强制libcurl忽略它将要加载的所有cookie,这些cookie是上一个会话中的"会话cookie"。默认情况下,libcurl始终存储和加载所有cookie,无论它们是否为会话cookie。会话cookie是没有有效期的cookie,它们只适用于此"会话"。

您的代码也有拼写错误。应该是这样的:

    CURLOPT_HTTPHEADER => $header,
    CURLOPT_COOKIEFILE => "cookieFIle.txt",
    CURLOPT_COOKIEJAR => "cookieFIle.txt"
);