2009-12-15 66 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。

至少这次,我收到回复。所以这已经成功了。