【问题标题】:No XML response when using cURL使用 cURL 时没有 XML 响应
【发布时间】: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 个框的支付网关收集信息,并且没有问题地返回响应。拨号服务器有问题吗!?

标签: php curl response


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    尝试此操作以确保正确设置第 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 正常 日期:格林威治标准时间 2009 年 12 月 16 日星期三 15:40:13 服务器:Apache/1.3.31 (Unix) PHP/4.3.8 X-Powered-By: PHP/4.3.8 传输编码:分块 内容类型:text/html

    248

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

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 1970-01-01
      • 2021-06-30
      • 2018-12-23
      • 1970-01-01
      • 2016-06-05
      • 2021-06-30
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多