POST XML PHP ile URL ve Tepki Kolu

4 Cevap php

Ben yıllardır PHP ile veri gönderme sayıda yöntem gördüm, ama biri var varsayarak, önerilen yöntem nedir merak ediyorum. Ya da belki de bunu yaparken biraz söylenmemiş henüz yarı-evrensel kabul görmüş bir yöntem yoktur. Bu aynı zamanda yanıt işleme içerir.

4 Cevap

Snoopy komut belki serin iken just post xml data with PHP arıyorsanız, neden cURL kullanmayalım? Bu, kolay hata işleme, ve zaten çantanızda bir araçtır. Aşağıda PHP cURL ile bir URL'ye XML göndermek için nasıl bir örnektir.

// url you're posting to        
$url = "http://mycoolapi.com/service/";

// your data (post string)
$post_data = "first_var=1&second_var=2&third_var=3";

// create your curl handler     
$ch = curl_init($url);

// set your options     
curl_setopt($ch, CURLOPT_MUTE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //ssl stuff
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:  application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// your return response
$output = curl_exec($ch); 

// close the curl handler
curl_close($ch);

cURL POST verilerini bildiğim tek güvenilir yolu, bir kenara socket kullanarak, olduğunu.

Now if you wanted to send data via GET there are several methods:
cURL
sockets
file_get_contents
file
and others

I Zend_Http_Client Zend Framework dan gibi.

Temelde stream_context_create() ve stream_socket_client() kullanarak çalışır.

Küçük bir örnek:

$client = new Zend_Http_Client();
$client->setUri('http://example.org');
$client->setParameterPost('foo', 'bar')
$response = $client->request('POST');

$status = $response->getStatus();
$body = $response->getBody();

Standart bir yol gerçekten yoktur. Dağıtımı içindir kodda, ben genellikle bulunan ilk birini kullanarak, cURL, file_get_contents ve sockets edin. Bu desteklerin her GET ve POST, ve bu her veya PHP sürümüne ve yapılandırmasına bağlı olarak kullanılabilir (ya da iş) olabilir veya olmayabilir.

Temelde gibi bir şey:

function do_post($url, $data) {
  if (function_exists('curl_init') && ($curl = curl_init($url))) {
    return do_curl_post($curl, $data);
  } else if (function_exists('file_get_contents') && ini_get('allow_url_fopen') == "1") {
    return do_file_get_contents_post($url, $data);
  } else {
    return do_socket_post($url, $data);
  }
}