2009-12-15 2 views
1

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

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

Благодаря

Джеймс

+0

В чем разница между серверами? (другая ОС, версия PHP и т. д.) –

+0

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

+0

James, php_info не повлияет. Однако, что вы подразумеваете под «php_info отключено». Вы имеете в виду, что у вас нет страницы, на которой отображается php_info? На самом деле это хорошо. Вы не должны оставлять сервер, чтобы кто-то мог публично обращаться к php_info. Это риск для безопасности. Вы подтвердили, что 4-й сервер может обслуживать любую веб-страницу? У вас есть тестовая страница, которую вы можете посетить, чтобы подтвердить, что Apache работает правильно в этом поле? – Justin

ответ

0

Попробуйте это, чтобы гарантировать четвёртую коробка на самом деле настроен правильно, чтобы служить веб-страниц:

Из командной строки терминала:

$ telnet 194.217.1.2 80 (press enter) 

Вы должны получить a ответ вроде:

Пробовал 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 Transfer-Encoding: фрагментированное Content-Type: текст/HTML

Сеть Quality Assurance Главная Некоторые вещи здесь

1

Во всяком случае я обнаружил решение этой проблемы. Кажется, сервер набора номера не принял переводы, которые начинались с запроса HEAD. Мне пришлось изменить некоторые части моего скрипта, чтобы использовать CURLOPT_CUSTOMREQUEST с GET.

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

Смежные вопросы