2009-11-02 27 views
18

muszę wysłać ten XMLwysyłanie danych XML z wykorzystaniem protokołu HTTP POST w PHP

 <?xml version="1.0" encoding="UTF-8"?> 
<gate> 
    <country>NO</country> 
    <accessNumber>1900</accessNumber> 
    <senderNumber>1900</senderNumber> 
    <targetNumber>4792267523</targetNumber> 
    <price>0</price> 
    <sms> 
     <content><![CDATA[This is a test æøå ÆØÅ]]></content> 
    </sms> 
</gate> 

do usługi bramki SMS. Usługa nasłuchuje żądań HTTP POST. Kod XML musi być osadzony w BODY żądania POST.

Używam PHP i framework CodeIgniter, ale jestem w sumie PHP n00b, więc najlepiej będę potrzebował dokładnego przewodnika, ale wszelkie wskazówki w dobrym kierunku zostaną docenione.

Odpowiedz

31

można użyć biblioteki cURL do wysyłania danych: http://www.php.net/curl

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_URL, "http://websiteURL"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "XML=".$xmlcontent."&password=".$password."&etc=etc"); 
$content=curl_exec($ch); 

gdzie postfield zawiera XML trzeba wysłać - trzeba nazwać postfield usługę API (Clickatell Chyba) oczekuje

+0

Tak, chciałbym ... zapytałem się, że to-guy czy mógłby zainstalować cURL, ale wa nie ma szans, by mógł to zrobić w rozsądnym czasie. – Frode

+4

następnie zobacz ten wpis na blogu: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl – dusoft

+0

Istnieje również potężne i bardzo ładne rozszerzenie pecl_http i różne PEAR HTTP_ * pakiety (łatwiejsze do zainstalowania przez faceta IT). – GZipp

22

Innym rozwiązaniem byłoby file_get_contents():

// $xml_str = your xml 
// $url = target url 

$post_data = array('xml' => $xml_str); 
$stream_options = array(
    'http' => array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n", 
     'content' => http_build_query($post_data))); 

$context = stream_context_create($stream_options); 
$response = file_get_contents($url, null, $context); 
+0

tak, strumienie zostały wprowadzone w PHP 4.3, ale są dość ukryte dla większości użytkowników. – dusoft

+0

Otrzymuję komunikat o błędzie: {Ostrzeżenie: file_get_contents (http://www.nwmls.com/Schemas/General/EverNetQueryXML.xsd) [function.file-get-contents]: nie udało się otworzyć strumienia: żądanie HTTP nie powiodło się! HTTP/1.1 404 Nie znaleziono w /home/phretscl/public_html/xml/pulldata.php na linii 42} – Neocortex

+0

Trzymaj się nie jest pytanie "Jak wysłać XML" zamiast "Jak otrzymać XML, a następnie przeczytać go "? – ChristoKiwi

Powiązane problemy