Есть ли причина, по которой сервер PHP cURL enblaed откажется отображать ответы 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 ответа
Во всяком случае, я нашел решение проблемы. Похоже, что сервер набора номера не принимал передачи, начавшиеся с запроса HEAD. В итоге мне пришлось изменить некоторые части моего скрипта, чтобы использовать CURLOPT_CUSTOMREQUEST с GET.
По крайней мере, на этот раз я получаю ответ. Так что это сделало свое дело.
Попробуйте это, чтобы убедиться, что 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 GMT Сервер: Apache/1.3.31 (Unix) PHP/4.3.8 X-Powered-By: PHP/4.3.8 Передача-кодирование: фрагментированное содержимое -Тип: текст/html
248
Домашняя страница службы обеспечения качества сети Некоторые материалы здесь
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.