2009-12-15 10 views
1

PHP cURL enblaed server가 xml 응답 표시를 거부하는 이유가 있습니까? 전화 걸기 서비스에 전화 번호를 게시하는 스크립트를 작성했습니다. 나는 cURL을 사용하는 것이 가장 좋은 방법이라고 생각했습니다.cURL을 사용할 때 XML 응답이 없음

각각 다른 버전의 PHP를 실행하는 3 개의 다른 서버에서 아무 문제없이 응답을받을 수 있습니다. 그러나 특정 서버에서 몇 번 시도해도 빈 응답 만 있습니다. 이 아니라 다른 곳에서 실행

<?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를 사용하여 요청 및 응답 헤더를 확인했으며 둘 다 비어있는 것으로 밝혀졌습니다.

아무도 도와 줄 수 있습니까? 명령 행 터미널에서

:

$ telnet 194.217.1.2 80 (press enter) 

당신은 가야

감사

제임스

+0

서버 간의 차이점은 무엇입니까? (다른 OS, PHP 버전 등) –

+0

안녕하세요 요르단, 하나의 서버가 Windows 호스트 시스템에서 PHP 5.3.0을 실행하고 있고, 다른 하나는 Linux 시스템에서 PHP 5.2.11을 실행하고 있고 다른 하나는 PHP를 실행 중입니다. 리눅스 시스템에서도 5.2.9. 이 세 가지 모두 문제없이 작동합니다. 작동을 거부 한 PHP 5.2가 실행 중입니다.5 리눅스 시스템에서. 나는 4 명 모두에게서 응답을 얻을 것으로 예상 했었지만 3 명만 응답했고 마지막 하나는 아직 cURL이 활성화되어 있지 않습니다. 한 가지 생각은 php_info가 마지막 서버에서 비활성화되었다는 것입니다. 그게 효과가 있니? – James

+0

James, php_info는 효과가 없습니다. 그러나 "php_info가 비활성화되었습니다"라는 것은 무엇을 의미합니까? php_info를 표시하는 페이지가 없다는 것을 의미합니까? 그것은 실제로 좋은 것입니다. 누군가가 공개적으로 php_info에 접근 할 수 있도록 서버를 올려 놓아서는 안됩니다. 보안 상 위험 할 수 있습니다. 네 번째 서버가 웹 페이지를 서버 할 수 있다는 것을 확인 했습니까? Apache가 해당 상자에서 제대로 실행되고 있는지 확인하기 위해 방문 할 수있는 테스트 페이지가 있습니까? – Justin

답변

0

4 상자가 웹 페이지를 제공하기 위해 제대로 실제로 설치 확인하기 위해이 시도 다음과 같은 응답 :

시도 192.168.245.84 .. 194.217.1.2에 연결됨. 이스케이프 문자는 '^]'입니다.

유형이 : 당신은 가능성이 다른 HTML 정보와 같은 응답을 일종의 받아야

GET /ClickToCall/CallRequest.asmx/Call HTTP/1.1 (press enter) 
Host: 194.217.1.2 (press enter twice) 

:

HTTP/1.1 200 OK 날짜 : 2009년 (수) 15시 40분 12월 16일 : 13 GMT 서버 : 아파치/1.3.31 (유닉스) PHP/4.3.8 X-전원이 기준 : PHP/4.3.8 전송 - 인코딩 : 콘텐츠 형식을 청크 : text/html과

248

네트워크 품질 보증 홈페이지 여기

1

어떤 물건 어쨌든 나는이 문제에 대한 해결책을 발견했다 . 전화 걸기 서버가 HEAD 요청으로 시작된 전송을 허용하지 않은 것으로 보입니다. 나는 GET으로 CURLOPT_CUSTOMREQUEST를 사용하기 위해 스크립트의 일부분을 수정해야만했다.

적어도 이번에는 응답을 받고 있습니다. 그래서 그 트릭을했습니다.

관련 문제