【发布时间】:2009-12-15 18:45:17
【问题描述】:
带有 PHP cURL 的服务器拒绝显示 xml 响应是否有原因?我一直在编写脚本以将号码发布到拨号服务。我觉得使用 cURL 是最好的选择。
在 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 来检查请求和响应标头,结果都是空的。
有人可以帮忙吗?
谢谢
詹姆斯
【问题讨论】:
-
服务器之间有什么区别? (不同的操作系统、PHP版本等)
-
嗨 Jordan,其中一台服务器在 Windows 托管系统上运行 PHP 5.3.0,另一台在 Linux 系统上运行 PHP 5.2.11,另一台在一台服务器上运行 PHP 5.2.9 Linux系统也是如此。所有这3个工作都没有问题。拒绝工作的是在 Linux 系统上运行 PHP 5.2.5。我本来希望得到所有 4 个响应,但只有 3 个给我响应,最后一个还没有启用 cURL。想到的一件事是 php_info 在最后一个服务器上被禁用。会有影响吗?
-
詹姆斯,php_info 不会有效果。但是,“php_info 已禁用”是什么意思。你的意思是你没有显示php_info的页面?这实际上是一件好事。你不应该让一个人可以公开访问 php_info 的服务器。这是一个安全风险。您是否确认第四台服务器可以为任何网页提供服务?您是否有可以访问的测试页面以确认 Apache 在该机器上正常运行?
-
嗨,贾斯汀,基本上第 4 个盒子已经启动并运行,目前正在为相当多的网页提供服务。今天我自己进行了一些测试。在其他 3 个框上(由 Firefox 上的 Firebug),响应标头上的内容长度始终大于 0,表示正在从拨号服务器发回响应。在第 4 个框中,内容长度始终为 0。有趣的是,相同的脚本被用于从第 4 个框的支付网关收集信息,并且没有问题地返回响应。拨号服务器有问题吗!?