Есть ли причина, по которой сервер enblaed PHP cURL откажется отображать ответы xml? Я работал над сценарием, чтобы отправлять номера в службу набора номера. Я чувствовал, что использовать cURL было бы лучше всего.Отсутствие ответа XML при использовании cURL
На трех разных серверах, каждый из которых запускает разные версии 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 и т. д.) –
Hi Jordan, Один из серверов работает под управлением PHP 5.3.0 в Windows Hosted System, другой работает под управлением PHP 5.2.11 в системе Linux, а другой работает с PHP 5.2.9 на Linux-системе. Все эти 3 не работают. Тот, кто отказывается работать, работает с PHP 5.2.5 в системе Linux. Я бы ожидал получить ответ от всех 4, но только 3 дают мне ответ, а последний еще не включен cURL. С одной стороны, php_info отключен на последнем сервере. Будет ли это иметь эффект? – James
James, php_info не повлияет. Однако, что вы подразумеваете под «php_info отключено». Вы имеете в виду, что у вас нет страницы, на которой отображается php_info? На самом деле это хорошо. Вы не должны оставлять сервер, чтобы кто-то мог публично обращаться к php_info. Это риск для безопасности. Вы подтвердили, что 4-й сервер может обслуживать любую веб-страницу? У вас есть тестовая страница, которую вы можете посетить, чтобы подтвердить, что Apache работает правильно в этом поле? – Justin