簡體   English   中英

驗證Curl HTTP發布

[英]Authenticating Curl HTTP Post

嗨,我正在嘗試通過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

我認為它必須在設置代理憑證方面有所作為,有人可以指導我正確的方法嗎?

SSL證書在主機和您的節點上均有效嗎? 如果不是,則添加以下選項。 這將繞過SSL驗證,並讓您連接

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

來自curl / php的Internet連接請求被Windows服務器拒絕。 如果您的PC連接到Windows網絡,則某些非Microsoft應用程序(例如fiddler,esclipse,maven)將無法連接到Internet。 您需要安裝cntlm代理,它將向您的請求添加標頭,以便它可以連接到Internet。 我已配置cntlm以查看端口3127

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

如果有人在使用Windows網絡上的可視php連接到Web時遇到問題,希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM