Нет ответа XML при использовании cURL - PullRequest
1 голос
/ 15 декабря 2009

Есть ли причина, по которой сервер, включенный в 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 для проверки заголовков запросов и ответов, и оба оказались пустыми.

Может кто-нибудь помочь?

Спасибо

Джеймс

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

В любом случае, я нашел решение проблемы. Похоже, что сервер дозвона не принимал передачи, которые начались с запроса HEAD. В итоге мне пришлось изменить некоторые части моего сценария, чтобы использовать CURLOPT_CUSTOMREQUEST с GET.

По крайней мере, на этот раз я получаю ответ. Так что сделал свое дело.

0 голосов
/ 16 декабря 2009

Попробуйте, чтобы убедиться, что 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 Дата: ср, 16 дек 2009 15:40:13 мск Сервер: Apache / 1.3.31 (Unix) PHP / 4.3.8 X-Powered-By: PHP / 4.3.8 Передача-кодировка: чанки Тип контента: текст / html

248

Домашняя страница по обеспечению качества сети Некоторые вещи здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...