代码之家  ›  专栏  ›  技术社区  ›  Dan

PHP libcurl中的CURLAUTH\u NEGOTIATE与cURL 7.57.0中的--NEGOTIATE的区别

  •  0
  • Dan  · 技术社区  · 7 年前

    有人能解释一下PHP libcurl中的CURLAUTH\u协商(PHP 5.6.4在Windows上运行libcurl v7.39.0)和cURL 7.57.0中的协商之间的区别吗?

    通过命令行使用cURL 7.57.0的以下请求有效:

    curl --negotiate -u MYDOMAIN\myuser:mypass  http://myip:myport/mywebservice.svc
    

    当我使用PHP 5.6.4(在Windows上运行)和libcurl v7.39.0尝试下面的代码时,远程web服务器返回401.2错误:

    <?php
    //Set vars
    $url = "http://myip:myport/mywebservice.svc"; // asmx URL of WSDL
    $un = "myuser";  //  username
    $password = "mypass"; // password
    $domain = "MYDOMAIN\\"; // domain
    
    //Create, Send and Output cURL Request
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NEGOTIATE); 
    curl_setopt($ch, CURLOPT_USERPWD,  $domain . $un.":".$password);
    
    $response = curl_exec($ch); 
    echo $response;
    ?>
    

    以下是PHP CURL设置:

    cURL support => enabled
    cURL Information => 7.39.0
    Age => 3
    **Features**
    AsynchDNS => Yes
    CharConv => No
    Debug => No
    GSS-Negotiate => No
    IDN => Yes
    IPv6 => Yes
    krb4 => No
    Largefile => Yes
    libz => Yes
    NTLM => Yes
    NTLMWB => No
    SPNEGO => Yes
    SSL => Yes
    SSPI => Yes
    TLS-SRP => No
    Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
    Host => i386-pc-win32
    SSL Version OpenSSL/1.0.1i
    ZLib Version => 1.2.7.3
    libSSH Version => libssh2/1.4.3
    

    非常感谢您的任何见解!谢谢~丹

    1 回复  |  直到 7 年前
        1
  •  0
  •   Dan    7 年前

    为了解决上述问题,我只是绕过PHP使用的libcurl。我从下载了最新版本的cURL https://curl.haxx.se/download.html (我们的服务器在windows上,仅供参考)并将其放在可访问的目录中。

    然后简单编写以下代码:

    <?php
    
    //Set vars
    $url = "http://<my_host_ip_or_domain>:<my_host_post_if_needed>/<my_path_etc>";
    $userName = "DOMAIN\username";
    $password = "password";
    $filePath = "myxmlfile.xml";
    $contentLength = strlen(file_get_contents($filePath));
    
    //Set any curl args (other than headers) you wish - per https://curl.haxx.se/docs/manpage.html (These are the ones I needed to solve my particular authentication problem)
    $curlSettings = array();
    $curlSettings["--negotiate"] = '';
    $curlSettings["-u"] = $userName .':'.  $password;
    $curlSettings["--http1.1"] = '';
    $curlSettings["--location-trusted"] = '';
    $curlSettings["--post301"] = '';
    $curlSettings["--data"] = '@"'. $filePath .'"';
    
    
    //Set any cURL headers you want
    $curlHeaders = array(
        'Content-Type: text/xml; charset=utf-8',
        'Content-Length: '. $contentLength,
        'SOAPAction: http://tempuri.org/blahblahblah',
        'Host: <my_host_ip>:<my_host_port>'
    );
    
    //Call the function
    $curlResp = curlRequest($url, $curlSettings, $curlHeaders);
    
    //Output the result
    echo '<pre>';
    print_r($curlResp);
    echo '</pre>';
    
    
    //Handle cURL Request
    function curlRequest($url,$args,$headers)
    {   
        /*
            Note: This needs to be the full path to CURL on server or you can set it to run as a windows cmd (as I have), 
            by following the instructions outlined by Michiel van Oosterhout in the following post: 
            https://stackoverflow.com/questions/9507353/how-do-i-install-set-up-and-use-curl-on-windows 
        */
        $strCurl = "curl";
    
        //Add Args / Setting to cURL request
        foreach ($args as $key => $val)
        {
            $strCurl .= " ". $key ." ". $val;
        }
    
        //Add headers to cURL request
        foreach ($headers as $h)
        {
            $strCurl .= ' --header "'. $h .'"';
        }
    
        //Set the URL
        $strCurl .= " ". $url;
    
        //Execute the curl request
        exec($strCurl, $resp);
    
        //Return an array of the response
        return $resp;
    }
    
    ?>
    

    很有魅力!