2009-12-15 64 views
1

爲什麼PHP cURL enblaed服務器會拒絕顯示xml響應?我一直在編寫一個腳本來向撥號服務發佈號碼。我覺得使用cURL是最好的選擇。使用cURL時沒有XML響應

在3個不同的服務器上,每個服務器運行不同版本的PHP,我能夠得到沒有問題的響應。但是在特定的服務器上,不管我嘗試了多少次,我只是得到一個空白的迴應。

此腳本問題:

<?php 
if ($_POST['request_callback']) 
{ 
$customer_name  = cleaninput($_REQUEST['customer_name'],"text"); 
$debtor_id   = cleaninput($_REQUEST['debtor_id'],"number"); 
$telephone_number = cleaninput($_REQUEST['customer_number'],"number"); 

$xml_request = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml_request .= '<CallRequest>'; 
$xml_request .= '<ProjectName>Noble Test</ProjectName>'; 
$xml_request .= '<ContactNumberToDial>'.$telephone_number.'</ContactNumberToDial>'; 
if (isset($_POST['callme_now'])) { 
    $xml_request .= '<DateTimeToDial></DateTimeToDial>'; 
} else { 
    $xml_request .= '<DateTimeToDial>' . date('Y-m-d ' . $_POST['hour_select'] . ':' . $_POST['minute_select'] . ':s') . '</DateTimeToDial>'; 
} 
$xml_request .= '<ListSource>WebLead</ListSource>'; 
$xml_request .= '<AgentName></AgentName>'; 
$xml_request .= '<AddToList>False</AddToList>'; 
$xml_request .= '<SpecificAgent>False</SpecificAgent>'; 
$xml_request .= '<DBField>'; 
$xml_request .= '<FieldName>Name</FieldName>'; 
$xml_request .= '<FieldValue>NobleTesting</FieldValue>'; 
$xml_request .= '</DBField>'; 
$xml_request .= '</CallRequest>'; 

$loginUsername = "username"; 
$loginPassword = "password"; 
//$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 

// Send using CURL 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://194.217.1.2/ClickToCall/CallRequest.asmx/Call");   // URL to post 
//curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
curl_setopt($ch, CURLOPT_USERPWD, "$loginUsername:$loginPassword"); //login 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
// curl_setopt($ch, CURLOPT_HEADER, 1); // make sure we get the header 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); # required for https urls 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xmlString=' . urlencode($xml_request)); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
$result = curl_exec($ch); // runs the post 
curl_close($ch); 

} 
?> 

這運行良好,在其他地方,但那裏不發送回一個響應這個特殊的服務器。我也用Firebug來檢查請求和響應頭,結果都是空的。

任何人都可以幫忙嗎?

感謝

詹姆斯

+0

服務器之間有什麼區別? (不同的操作系統,PHP版本等) – 2009-12-15 19:48:10

+0

嗨Jordan, 其中一臺服務器在Windows託管系統上運行PHP 5.3.0,另一臺在Linux系統上運行PHP 5.2.11,另一臺運行PHP 5.2.9在Linux系統上。所有這三個工作都沒有問題。拒絕工作的人運行PHP 5.2。5在Linux系統上。我希望能得到所有4個響應,但只有3個給我回應,而最後一個還沒有啓用cURL。有一件事是想在最後一臺服務器上禁用php_info。會有什麼影響? – James 2009-12-15 20:39:27

+0

James,php_info不會有效果。但是,你的意思是「php_info被禁用」。你的意思是你沒有顯示php_info的頁面?這實際上是一件好事。你不應該離開服務器,有人可以公開訪問php_info。這是一個安全風險。 您確定第4臺服務器可以服務於任何網頁嗎?你有可以訪問的測試頁面來確認Apache在該盒子上正常運行嗎? – Justin 2009-12-16 15:36:29

回答

0

試試這個,以確保第4箱實際上是設置恰當地爲網頁:

從命令行終端:

$ telnet 194.217.1.2 80 (press enter) 

你應該得到回覆如下:

嘗試192.168.245.84 .. 。 連接到194.217.1.2。 轉義字符是'^]'。

此類型在:

GET /ClickToCall/CallRequest.asmx/Call HTTP/1.1 (press enter) 
Host: 194.217.1.2 (press enter twice) 

你應該得到的迴應有點像這樣用不同的HTML信息可能:

HTTP/1.1 200 OK 日期:星期三,2009年15:40 12月16日:13 GMT 服務器:Apache/1.3.31(Unix的)PHP/4.3.8 X-已啓動方式:PHP/4.3.8 傳輸編碼:分塊 的Content-Type:text/html的

網絡質量保證首頁 這裏

1

一些東西,反正我已經發現瞭解決問題的辦法。似乎撥號服務器不接受以HEAD請求開始的傳輸。我最終不得不修改我的腳本的某些部分以使用GET的CURLOPT_CUSTOMREQUEST。

至少這次,我收到回覆。所以這已經成功了。