首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启用php-curl的功能

如何启用php-curl的功能
EN

Stack Overflow用户
提问于 2012-04-03 23:02:36
回答 2查看 7.4K关注 0票数 1

我需要我的CLI PHP脚本来发布一些价值到SPNEGO认证的网站。

代码语言:javascript
复制
$ch = curl_init(USERSPACE_MYSQL_SERVICES);

curl_setopt_array($ch, [
    CURLOPT_HTTPAUTH => ??, //Set to SPNEGO
    CURLOPT_POSTFIELDS => [...] 
]);

然而,由于某些原因,SPNEGO被禁用:

从我的phpinfo中提取:

代码语言:javascript
复制
curl

cURL support => enabled
cURL Information => 7.21.6
Age => 3
Features
AsynchDNS => No
Debug => No
GSS-Negotiate => Yes
IDN => Yes
IPv6 => Yes
Largefile => Yes
NTLM => Yes
SPNEGO => No <---------------
SSL => Yes
SSPI => No
krb4 => No
libz => Yes
CharConv => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtmp, rtsp, smtp, smtps, telnet, tftp
Host => x86_64-pc-linux-gnu
SSL Version => OpenSSL/1.0.0e
ZLib Version => 1.2.3.4

与之通信的Apache服务器的设置如下:

代码语言:javascript
复制
            AuthType Kerberos
            AuthName "Kerberos LAN Realm Login"
            KrbAuthRealm LAN
            Krb5KeyTab /etc/apache2/auth/apache2.keytab

            KrbMethodK5Passwd Off
            KrbSaveCredentials On
            KrbLocalUserMapping On

当通过命令行curl尝试它时,它可以工作,但我必须输入一个虚拟密码:

代码语言:javascript
复制
curl --negotiate -u user https://example.com
Enter host password for user 'user':
<html>
...

如何为php curl启用SPNEGO,以及如何在脚本中使用它?

更新

我尝试过以下几种方法:

代码语言:javascript
复制
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPAUTH => CURLAUTH_ANY,
    CURLOPT_POSTFIELDS => [...]
]);

$response = curl_exec($ch);

$info = curl_getinfo($ch);

if ($info['http_code'] >= 400)
      die("HTTP ERROR {$info['http_code']}");

echo $response;

我得到的是:HTTP ERROR 401

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-04 02:42:36

看起来您可能需要在配置命令中使用参数"-- with -spnego“重新编译curl。

有关配置命令的示例:http://curl.haxx.se/mail/lib-2012-02/0094.html

满文档(overkill):http://curl.haxx.se/docs/install.html

票数 1
EN

Stack Overflow用户

发布于 2012-04-04 02:56:55

事实证明,我不需要在CURL中启用SPNEGO,因为它在GSS auth中工作得很好。就像CLI一样,我需要在不提供密码的情况下设置CURLOPT_USERPWD

代码语言:javascript
复制
$username = rtrim(`id -un`, "\n");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPAUTH => CURLAUTH_ANY,
    CURLOPT_POSTFIELDS => [...],
    CURLOPT_USERPWD => "$username:"
]);

现在它工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9996050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档