【问题标题】:Authenticating Curl HTTP Post认证 Curl HTTP Post
【发布时间】:2013-08-30 04:24:54
【问题描述】:

嗨,我正在尝试通过 CURL 发送 POST 请求,但它抛出了一个错误,上面写着
“连接到 qaservices.carrental.com:443 失败;没有错误”。

用户名和密码已经包含在xml文件的soap头中

<?php
$filename = 'c:/v.xml';
$data =  file_get_contents($filename);
$url = 'https://qaservices.carrental.com/wsbang/HTTPSOAPRouter/ws9071';
$soap_do = curl_init(); 
curl_setopt($soap_do, CURLOPT_URL,            $url );   
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($soap_do, CURLOPT_TIMEOUT,        10); 
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_POST,           true ); 
curl_setopt($soap_do, CURLOPT_HEADER,           0 ); 
curl_setopt($soap_do, CURLOPT_POSTFIELDS,    $data); 

$result = curl_exec($soap_do);
$err = curl_error($soap_do);  

if ( curl_errno($soap_do) )
{   
    $result = 'ERROR -> ' . curl_errno($soap_do) . ': ' . curl_error($soap_do);
}
else 
{   
    $returnCode = (int)curl_getinfo($soap_do, CURLINFO_HTTP_CODE);   
    switch($returnCode)
    {      
        case 200:      
            break;    
        default:     
            $result = 'HTTP ERROR -> ' . $returnCode;        
            break; 
    }
}  
curl_close($ch);
echo $result;
?>

当我尝试在 vb.net 中发送 HttpWebRequest 时,这是可行的。 vb.net 中的代码副本是

       doc.Load("c:/v.xml")
        Dim content As String = doc.InnerXml
        Dim urlEncoded As String = content
        Dim encodedRequest As Byte() = New ASCIIEncoding().GetBytes(urlEncoded)
        Dim request As HttpWebRequest = DirectCast(WebRequest.Create("https://qaservices.carrental.com/wsbang/HTTPSOAPRouter/ws9071"), HttpWebRequest)
        request.Method = "POST"
        request.Accept = "*/*"
        request.ContentType = "application/x-www-form-urlencoded"
        '  request.UserAgent = "Custom REST client v1.0"
        request.ContentLength = encodedRequest.Length
                request.Proxy.Credentials = CredentialCache.DefaultCredentials
        Dim reqStream As Stream = request.GetRequestStream()
        reqStream.Write(encodedRequest, 0, encodedRequest.Length)
        reqStream.Flush()
        reqStream.Close()

        Dim response As HttpWebResponse = (request.GetResponse())

        Dim responseStream As Stream = response.GetResponseStream()
        Dim streamReader As New StreamReader(responseStream)


        Dim responseContent As String = streamReader.ReadToEnd

我认为它必须在设置代理凭据方面做一些事情有人可以指导我正确的路径

【问题讨论】:

    标签: php .net curl libcurl soap-client


    【解决方案1】:

    SSL 证书在主机和您的节点上都有效吗?如果没有,则添加以下选项。这将绕过 SSL 验证并让您连接

    curl_setopt ($soap_do, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt ($soap_do, CURLOPT_SSL_VERIFYPEER, 0); 
    

    【讨论】:

    • 粘贴print_r(curl_getinfo($soap_do));的输出
    • 数组 ( [url] => qaservices.carrental.com/wsbang/HTTPSOAPRouter/ws9071 [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result ] => 0 [redirect_count] => 0 [total_time] => 1.498 [namelookup_time] => 0.499 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] = > 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array () [primary_ip] => 170.225.0.83 [primary_port] => 443
    • [local_ip] => [local_port] => 0 [redirect_url]
    【解决方案2】:

    来自 curl/php 的 Internet 连接请求被 Windows 服务器拒绝。如果您的电脑连接到 Windows 网络,一些非微软应用程序(如 fiddler、esclipse、maven)将无法连接到互联网。您需要安装 cntlm 代理,它将为您的请求添加一个标头,以便它可以连接到互联网。 我已将 cntlm 配置为查看端口 3127

    在上面的代码中我添加了 $proxy = '127.0.0.1:3127'; curl_setopt($soap_do, CURLOPT_PROXY, $proxy);

    如果有人在 windows 网络上使用可视化 php 连接到网络时遇到问题,希望得到帮助

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2015-10-31
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2013-02-24
      相关资源
      最近更新 更多