2014-02-16 7 views
0

Я пытаюсь создать запрос HTTP POST, с помощью PHP + Curl, что эквивалентно, например упомянутый here файла «SendToast.aspx.cs»HTTP POST запрос с PHP + Curl

Мой PHP-файл выглядит следующим образом ниже ,

<?php 

$uri  = $_POST["uri"]; 
$title = $_POST["title"]; 
$subtitle = $_POST["subtitle"]; 


$file = 'file.txt'; 
//phpinfo(); 
$theData = '<?xml version="1.0" encoding="utf-8"?>\\r'; 
$theData .= "<wp:Notification xmlns:wp=\"WPNotification\">"; 
$theData .= "<wp:Toast>"; 
$theData .= "<wp:Text1>" .$title; 
$theData .= "</wp:Text1>"; 
$theData .= "<wp:Text2>" .$subtitle; 
$theData .= "</wp:Text2>"; 
$theData .= "<wp:Param>/Page2.xaml?NavigatedFrom=Toast Notification</wp:Param>"; 
$theData .= "</wp:Toast>"; 
$theData .= "</wp:Notification>"; 

$header_array = array('X-WindowsPhone-Target' => 'toast','X-NotificationClass' => '2','Content-type:' => 'text/xml','Content-length:' => strlen($theData)); 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_HTTPHEADER,$header_array); 
curl_setopt($ch, CURLOPT_URL,$uri); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$theData); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
//print_r($ch); 
$server_output = curl_exec ($ch); 
//echo $server_outout; 
//curl_close ($ch); 

if (curl_errno($ch)) 
{ 
     print "Error: " . curl_error($ch); 
} 
else 
{ 
// Show me the result 
    print $server_output; 
    curl_close($ch); 
} 
//file_put_contents($file, $theData); 

?>

может кто-нибудь сказать мне, что я делаю неправильно здесь ?, я также пытался использовать HTTPRequest Class, чтобы создать этот пример, но я имел трудное время настройки расширения php_http.dll, кажется, файл имеет либо зависимости, либо его коррумпированность. тем не менее помощь в этом была бы большой.

+0

Не могли бы вы сообщить нам ошибки или неправильное поведение, которое вы испытываете. –

+0

жаль приятеля, но я не очень хорошо знаком с функциями вывода php, что я могу сказать, если все работает нормально, оно отправляет уведомление моему телефонному приложению (пример ASP отлично работает и отправляет уведомление, означает, что phoneapp одобрен для получения), переменная server_output ничего не возвращает, ее пустое значение, или может быть, я не знаю, как точно распечатать его, можете ли вы намекнуть мне, как я могу печатать коды ошибок или данные ответа? это было бы очень полезно – maxchirag

+0

Вы забыли кодировать данные POST: curl_setopt ($ ch, CURLOPT_POSTFIELDS, urlencode ($ theData)); – hindmost

ответ

2

Вы устанавливаете заголовок HTTP ($header_array) неправильным образом. Используйте это.

$header_array = array(
    'X-WindowsPhone-Target: toast', 
    'X-NotificationClass: 2', 
    'Content-type: text/xml' 
); 

Если это не работает, то изменить text/xml в application/xml сверху.

+0

да, из разных примеров я узнал об этом. в любом случае, спасибо за ваш ответ. – maxchirag

0

попытаться использовать urlencode и подготовить переменную POST первой

$postedfield="MYPOST=".urlencode($theData); 

и затем использовать эту переменную

curl_setopt($ch, CURLOPT_POSTFIELDS,$postedfield); 

и декодировать размещенную значение

+0

попробовал это, не помогло :-( – maxchirag

+0

break ваша проблема в деталях. Сначала попробуйте без какого-либо заголовка и попытайтесь вывести переменную в текст, и если она будет выведена, вам может потребоваться отформатировать в действительном xml, чтобы позволить C# понять запросы –

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