PHP ile bir web API POST için en iyi yolu nedir?

4 Cevap

I () POST için bir yol olarak kullanılan kıvırmak gördüm - daha yaygın olarak kullanılır, ya da daha başka yollar var mı?

4 Cevap

Görme incredibly huge amount of settings you have with cURL, başka bir şey kullanmak için hiçbir neden muhtemelen var.

PHP 4.3 ve 5 gibi, Sen de stream_context_create() in conjuction with fopen() / file_get_contents() POST isteklerini yapmak için kullanabilirsiniz.

Tam POST örnek here.

Hangi için daha iyi olduğu gibi, ben bir PHP cURL destek içeri derlenmiş Ama o needs an external library görme ve akımı bağlamı yöntem, bir could iddia etmez install görmedim ikincisi taşınabilir uygulamalar için daha iyi bir seçimdir.

CURL hala araçları daha esnek ve daha fazla seçenek ve işlevlere sahiptir. POST yapmanız gereken istekleri sadece Ama eğer, ben yerleşik bir şekilde kullanmak olacaktır.

AFAIK, cURL PHP başka bir API POST için önerilen bir yoldur. Orada bunu yapmanın başka yolları olabilir, ancak cURL yapılı-sadece bu gibi durumlarla başa PHP, neden kullanılmasın?

Ben bir similar question recently, that provides a basic POST'able implementation of both file_get_contents() ve cURL ve karar vermenize yardımcı gereken bazı kriterler yanıtladı.

Zaten cURL libcurl uzantısı gerektirir ve bazı sunucularda file_get_contents() allow_url_fopen is set to Off olduğu uzak dosyaları istemek mümkün olmayabilir belirtildi.

Sen biri sizin için en uygun hangi seçmek zorundasınız, ben normalde cURL mevcut değilse geri file_get_contents() düşer aşağıdaki işlevi kullanın.

function Request($url, $post = null)
{
    if (extension_loaded('curl') === true)
    {
        $curl = curl_init($url);

        if (is_resource($curl) === true)
        {
            curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($curl, CURLOPT_FAILONERROR, true);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

            if (isset($post) === true)
            {
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, (is_array($post) === true) ? http_build_query($post, '', '&') : $post);
            }

            $result = curl_exec($curl);
        }

        curl_close($curl);
    }

    else
    {
        $http = array
        (
            'method' => 'GET',
            'user_agent' => $_SERVER['HTTP_USER_AGENT'],
        );

        if (isset($post) === true)
        {
            $http['method'] = 'POST';
            $http['header'] = 'Content-Type: application/x-www-form-urlencoded';
            $http['content'] = (is_array($post) === true) ? http_build_query($post, '', '&') : $post;
        }

        $result = @file_get_contents($url, false, stream_context_create(array('http' => $http)));
    }

    return $result;
}