Php 使用cURL时没有XML响应

Php 使用cURL时没有XML响应,php,curl,response,Php,Curl,Response,PHP服务器拒绝显示xml响应有什么原因吗?我一直在编写一个脚本,将号码发送到拨号服务。我觉得使用卷发是最好的选择 在3个不同的服务器上,每个服务器都运行不同版本的PHP,我能够毫无问题地得到响应。但在特定的服务器上,无论我尝试了多少次,都只会得到一个空白响应 这是有问题的脚本: <?php if ($_POST['request_callback']) { $customer_name = cleaninput($_REQUEST['customer_name'],"text"

PHP服务器拒绝显示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检查了请求和响应头,结果都是空的

有人能帮忙吗

谢谢


James

尝试此操作,以确保第四个框实际设置正确,以服务于网页:

从命令行终端:

$ 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.1200ok 日期:2009年12月16日星期三15:40:13 GMT 服务器:Apache/1.3.31(Unix)PHP/4.3.8 X-Powered-By:PHP/4.3.8 传输编码:分块 内容类型:text/html

248

网络质素保证网页 这里有些东西

尝试此操作,以确保第四个框实际上已正确设置,以服务于网页:

从命令行终端:

$ 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.1200ok 日期:2009年12月16日星期三15:40:13 GMT 服务器:Apache/1.3.31(Unix)PHP/4.3.8 X-Powered-By:PHP/4.3.8 传输编码:分块 内容类型:text/html

248

网络质素保证网页 这里有些东西
无论如何,我已经找到了这个问题的解决办法。拨号服务器似乎不接受以HEAD请求开始的传输。最后,我不得不修改脚本的某些部分,以便在GET中使用CURLOPT_CUSTOMREQUEST


至少这次,我收到了回复。这样就成功了。

无论如何,我已经找到了问题的解决方案。拨号服务器似乎不接受以HEAD请求开始的传输。最后,我不得不修改脚本的某些部分,以便在GET中使用CURLOPT_CUSTOMREQUEST


至少这次,我收到了回复。这就成功了。

服务器之间的区别是什么?(不同的操作系统、PHP版本等)嗨,Jordan,其中一台服务器在Windows托管系统上运行PHP5.3.0,另一台在Linux系统上运行PHP5.2.11,另一台也在Linux系统上运行PHP5.2.9。所有这三个都能正常工作。拒绝工作的是在Linux系统上运行PHP5.2.5。我本来希望得到所有4个的响应,但只有3个给了我响应,最后一个还没有响应,因为它启用了cURL。有一点需要考虑的是,php_信息在最后一台服务器上被禁用。那会有效果吗?詹姆斯,php_信息不会有效果。但是,“php_信息被禁用”是什么意思。你是说你没有显示php_信息的页面吗?这其实是一件好事。您不应该让某个服务器处于运行状态,以便有人可以公开访问php_信息。这是一种安全风险。您是否确认第四台服务器可以为任何网页提供服务?您是否有一个测试页面可以访问,以确认Apache是否在该框上正常运行?嗨,Justin,基本上第四个框已经启动并运行,目前正在为许多网页提供服务。今天我自己做了一些测试。在其他3个框中(Firefox上的Firebug),响应头上的内容长度始终大于0,表示正在从拨号服务器发回响应。在第四个框中,内容长度始终为0。有趣的是,同一个脚本被用于从第四个方框的支付网关收集信息,并且回复没有问题。拨号服务器有故障吗!?服务器之间的区别是什么?(不同的操作系统、PHP版本等)嗨,Jordan,其中一台服务器在Windows托管系统上运行PHP5.3.0,另一台在Linux系统上运行PHP5.2.11,另一台也在Linux系统上运行PHP5.2.9。所有这三个都能正常工作。拒绝工作的是在Linux系统上运行PHP5.2.5。我本来希望得到所有4个的响应,但只有3个给了我响应,最后一个还没有响应,因为它启用了cURL。有一点需要考虑的是,php_信息在最后一台服务器上被禁用。那会有效果吗?詹姆斯,php_信息不会有效果。但是,“php_信息被禁用”是什么意思。你是说你没有显示php_信息的页面吗?这其实是一件好事。您不应该让某个服务器处于运行状态,以便有人可以公开访问php_信息。这是一种安全风险。您是否确认第四台服务器可以为任何网页提供服务?您是否有一个测试页面可以访问,以确认Apache是否在该框上正常运行?嗨,Justin,基本上第四个框已经启动并运行,目前正在为许多网页提供服务。今天我自己做了一些测试。在其他3个框中(Firefox上的Firebug),响应头上的内容长度始终大于0,表示正在从拨号服务器发回响应。在第四个框中,内容长度始终为0。有趣的是,同一个脚本被用于从第四个方框的支付网关收集信息,并且回复没有问题。拨号服务器有故障吗!?