当前位置: 首页 > 知识库问答 >
问题:

CURL NTML身份验证可以从命令行进行,但不能使用php脚本

颛孙英才
2023-03-14

我需要打个电话。net web服务。此web服务需要NTLM身份验证。为此,我编写了一些使用NTLM身份验证的代码。我正在尝试使用curl与NTLM身份验证进行连接。但是从php脚本中我得到了401错误。我尝试了不同的标题内容(xml和html)。请帮忙。

下面是正在工作的命令行。

curl http://qtskofaxweb01.etch.com/TotalAgility/Services/Sdk/JobService.svc?wsdl -v --ntlm --negotiate -u kofax:Jagadish6^

下面是我的PHP脚本,它不工作

$path = 'http://qtskofaxweb01.etch.com/TotalAgility/Services/Sdk/JobService.svc?wsdl';
$user = 'kofax';
$password = 'Jagadish6^';

$ch = curl_init($path);

$headers = array();
$headers[] = 'Accept: text/xml';
$headers[] = 'Content-Type: text/xml';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password);

$result = curl_exec($ch);

print_r(curl_getinfo($ch));
echo curl_error($ch);
curl_close($ch);
var_dump($result);

下面给出了输出

Array
(
    [url] => http://qtskofaxweb01.etch.com/TotalAgility/Services/Sdk/JobService.svc?wsdl
    [content_type] => text/html
    [http_code] => 401
    [header_size] => 657
    [request_size] => 546
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 1
    [total_time] => 0.003738
    [namelookup_time] => 1.4E-5
    [connect_time] => 1.5E-5
    [pretransfer_time] => 1.7E-5
    [size_upload] => 0
    [size_download] => 1293
    [speed_download] => 345906
    [speed_upload] => 0
    [download_content_length] => 1293
    [upload_content_length] => 0
    [starttransfer_time] => 0.002228
    [redirect_time] => 0.001484
    [certinfo] => Array
        (
        )

[primary_ip] => 10.10.3.40
[redirect_url] => 

)

共有1个答案

林子石
2023-03-14

请尝试一下...

$url="http://qtskofaxweb01.etch.com/TotalAgility/Services/Sdk/JobService.svc?wsdl";

    $user = 'kofax';
    $password = 'Jagadish6^';

    $parameters=array();

    class Emp {
      public $user  = "";
      public $password   = "";
   }
   $e = new Emp();
   $e->user = $user ;
   $e->password   = $password ;

    $parameters['user']=$e;
    $parameters=json_encode($parameters);

    $ch = curl_init();  

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
    'Content-type: application/x-www-form-urlencoded'
    ));
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $output=curl_exec($ch);

    if($output === false)
    {
        echo "Error Number:".curl_errno($ch)."<br>";
        echo "Error String:".curl_error($ch);
    }
    curl_close($ch);

    $obj = json_decode($output, TRUE);
 类似资料:
  • 我想使用我的GitLab帐户中的私有令牌克隆GitLab存储库,而不提示输入我的自动化脚本。 有人能给我一个样品吗? 我知道我可以使用用户和密码执行此操作: 我知道使用ssh密钥是可能的 但是,这两种选择都是不够的。

  • 致命:“https://github.com/scuzzlebuzzle/ol3-1.git/'”身份验证失败

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。

  • 问题内容: 因此,我试图使用子进程从python脚本中以超级用户身份运行一个进程。在ipython shell中,类似 工作正常,但是一旦将其粘贴到脚本中,我就会开始获得:。 我猜这是由于sudo处理ubuntu上的环境的方式。(我也尝试和与无济于事) 所以我的问题基本上是,如果我想以超级用户身份运行,并在需要时提示用户输入超级用户密码,我该怎么做?我无意在脚本中存储密码。 编辑: 我尝试将命令既

  • 我正在尝试在两个LAMP服务器之间进行相互ssl身份验证。 我实际上有3台服务器。一个是主服务器,另外两个是对其进行SOAP调用的客户端。 在主客户端和一个客户端上,我安装了Comodo Postive SSL证书。我可以从该客户端连接到主客户端并成功进行SSL身份验证。 在第二个客户端上,我安装了一个Lets加密证书。我从他们的网站上获得了根证书(并使用https://whatsmychainc