2009-11-02 37 views
18

tôi cần phải gửi XML nàygửi dữ liệu XML sử dụng HTTP POST với 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> 

đến một dịch vụ tin nhắn SMS gateway. Dịch vụ này lắng nghe các yêu cầu HTTP POST. XML phải được nhúng trong BODY của yêu cầu POST.

Tôi đang sử dụng PHP và khung CodeIgniter, nhưng tôi là tổng số PHP n00b, vì vậy lý tưởng tôi cần hướng dẫn kỹ lưỡng, nhưng bất kỳ gợi ý nào theo đúng hướng sẽ được đánh giá cao.

Trả lời

31

bạn có thể sử dụng thư viện cURL cho đăng dữ liệu: 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); 

nơi postfield chứa XML bạn cần phải gửi - bạn sẽ cần phải đặt tên cho postfield dịch vụ API (Clickatell tôi đoán) hy vọng

+0

Vâng, tôi ước ... Tôi đã hỏi IT-guy nếu anh ấy có thể cài đặt cURL, nhưng có wa không có cơ hội anh ta có thể làm điều đó trong thời gian hợp lý. – Frode

+4

sau đó, xem bài đăng trên blog này: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl – dusoft

+0

Ngoài ra còn có phần mở rộng pecl_http mạnh mẽ và rất đẹp và các PEAR HTTP_ * khác nhau gói (dễ dàng hơn cho anh chàng CNTT của bạn để cài đặt). – GZipp

22

Một tùy chọn khác sẽ là 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

vâng, các luồng đã được giới thiệu trong PHP 4.3, nhưng khá ẩn đối với hầu hết người dùng. – dusoft

+0

Tôi gặp lỗi: {Warning: file_get_contents (http://www.nwmls.com/Schemas/General/EverNetQueryXML.xsd) [function.file-get-contents]: không thể mở luồng: Yêu cầu HTTP không thành công! Không tìm thấy HTTP/1.1 404 trong /home/phretscl/public_html/xml/pulldata.php trên dòng 42} – Neocortex

+0

Cố định không phải là câu hỏi "Làm cách nào để gửi XML" thay vì "Làm cách nào để nhận XML và sau đó đọc nó "? – ChristoKiwi

Các vấn đề liên quan