Hayır XML yanıt cURL kullanarak

2 Cevap php

Bir PHP cURL enblaed sunucu xml yanıtlarını görüntülemek için reddeder bir nedeni var mı? Ben bir arama servisi numaraları göndermek için bir senaryo üzerinde çalışıyoruz. Ben cURL yapılacak en iyi şey olurdu kullanarak hissettim.

3 farklı sunucularda, PHP çalışan her farklı sürümleri, ben herhangi bir sorun ile yanıt almak mümkün duyuyorum. Ancak belirli bir sunucuda olursa olsun, ben kaç kez deneyin, ben sadece boş bir cevap alıyorum.

Söz konusu bu komut:

<?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);

}
?>

Bu da başka bir yerde ama bir yanıt geri gönderilmez bu özel sunucu çalışır. Ben de istek ve yanıt başlıklarını kontrol etmek kundakçı kullanmış ve hem de boş olduğu ortaya çıktı.

Herkes yardımcı olabilir?

Teşekkürler

James

2 Cevap

Her neyse sorunun çözümü keşfettiler. Bu arama sunucusu HEAD isteği ile başladı transferlerini kabul etmedi görünüyor. Ben GET ile CURLOPT_CUSTOMREQUEST yararlanmak benim yazısının bazı bölümleri değiştirmek zorunda sona erdi.

Bu sefer en azından, ben bir yanıt alıyorum. Yani hile yapmış.

4 kutu aslında web sayfalarını düzgün hizmet kurulum sağlamak için bu deneyin:

Bir komut satırı terminalden:

$ telnet 194.217.1.2 80  (press enter)

Sen gibi bir cevap alırsınız:

Trying 192.168.245.84... Connected to 194.217.1.2. Escape character is '^]'.

Bu Tip:

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

Büyük olasılıkla farklı HTML bilgisi ile çeşit böyle bir cevap almak gerekir:

HTTP/1.1 200 OK Date: Wed, 16 Dec 2009 15:40:13 GMT Server: Apache/1.3.31 (Unix) PHP/4.3.8 X-Powered-By: PHP/4.3.8 Transfer-Encoding: chunked Content-Type: text/html

248

Network Quality Assurance Homepage Some stuff here