Bir web sayfasına POST PHP kullanmak nasıl sonra yerel, geri sonuçları almak

3 Cevap php

Bunu yapmak için ayarlanmış PHP benim web sunucusunda bir sayfa var

if ($_POST['post'] == true) { echo: 'hello, world'; }

Daha sonra "gerçek" eşit ve "merhaba dünya" değerini döndürür, ileti "post" bu sayfaya çağıran bir sayfa oluşturmak istiyorum. Ben çalışan bir komut dosyası var, ama sayfalar farklı sunucularda yalnızca. Ne yazık ki, bu sayfaların her ikisi de aynı sunucu üzerinde, yani, benim kod iste, ve ben siz bana yardımcı olabilir umut ediyorum, teşekkür ederim :)

function post($site, $post) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$site);
    curl_setopt($ch, CURLOPT_FAILONERROR,1);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $retValue = curl_exec($ch);
    curl_close($ch);
    return $retValue;
}

echo post('data.php', 'post=true');

3 Cevap

class Curl_lib 
{

    private $resource = NULL;       // libcurb init() resource
    private $config   = array();    // Construction config
    public $header    = array();    // Response Header
    public $body      = array();    // Response Body

    /**
     * Factory Method
     */
    public static function factory($data = array())
    {
        return new self($data);
    }

    /**
     * Constructor
     */
    public function __construct($data = array())
    {
        $config = array(
            CURLOPT_HEADER => false
        );

        // Apply any passed configuration
        $data += $config;
        $this->config = $data;

        $this->resource = curl_init();

        // Apply configuration settings
        foreach ($this->config as $key => $value) 
        {
            $this->set_opt($key, $value);
        }
    }


    /**
     * Set option
     *
     * @param String Curl option to set
     * @param String Value for option
     * @chainable
     */
    public function set_opt($key, $value)
    {
        curl_setopt($this->resource, $key, $value);

        return $this;
    }


    /**
     * Execute the curl request and return the response
     *
     * @return String Returned output from the requested resource
     * @throws Kohana_User_Exception
     */
    public function exec()
    {
        $ret = curl_exec($this->resource);

        //Wrap the error reporting in an exception
        if ($ret === false)
        {
            kohana::log('error', curl_error($this->resource));

            throw new Exception(curl_error($this->resource));
        }
        else
        {
            return $ret;
        }

    }

    /**
     * Get Error
     * Returns any current error for the curl request
     *
     * @return string The error
     */
    public function get_error()
    {
        return curl_error($this->resource);
    }

    /**
    * Destructor
    */
    function __destruct()
    {
        curl_close($this->resource);
    }


    /**
     * Get
     * Execute an HTTP GET request using curl
     *
     * @param String url to request
     * @param Array additional headers to send in the request
     * @param Bool flag to return only the headers
     * @param Array Additional curl options to instantiate curl with
     * @return  Array       array of 'header' and 'body'
     */
    public static function get($url, 
                               Array $headers = array(), 
                               $headers_only = FALSE, 
                               Array $curl_options = array())
    {
        $ch = self::factory($curl_options);

        $ch->set_opt(CURLOPT_URL, $url)
           ->set_opt(CURLOPT_RETURNTRANSFER, TRUE)
           ->set_opt(CURLOPT_NOBODY, $headers_only)
           ->set_opt(CURLOPT_HTTPHEADER, array("Expect:"))
           ->set_opt(CURLOPT_HEADERFUNCTION, array($ch, 'read_header'))
           ->set_opt(CURLOPT_WRITEFUNCTION, array($ch, 'read_body'));

        //Set any additional headers
        if(!empty($headers)) $ch->set_opt(CURLOPT_HTTPHEADER, $headers);

        $ch->exec();

        return array(
            'header' => $ch->header,
            'body'   => $ch->body
        );
    }


    /**
     * Post
     * Execute an HTTP POST request, posting the past parameters
     *
     * @param   String      url to request
     * @param   Array       past data to post to $url
     * @param   Array       additional headers to send in the request
     * @param   Bool        flag to return only the headers
     * @param   Array       Additional curl options to instantiate curl with
     * @return  Array       array of 'header' and 'body'
     */
    public static function post($url, 
                                Array $data = array(), 
                                Array $headers = array(), 
                                $headers_only = FALSE, 
                                Array $curl_options = array())
    {
        $ch = self::factory($curl_options);

        $ch->set_opt(CURLOPT_URL, $url)
           ->set_opt(CURLOPT_NOBODY, $headers_only)
           ->set_opt(CURLOPT_RETURNTRANSFER, TRUE)
           ->set_opt(CURLOPT_POST, TRUE)
           ->set_opt(CURLOPT_POSTFIELDS, $data)
           ->set_opt(CURLOPT_HTTPHEADER, array("Expect:"))
           ->set_opt(CURLOPT_HEADERFUNCTION, array($ch, 'read_header'))
           ->set_opt(CURLOPT_WRITEFUNCTION, array($ch, 'read_body'));

        //Set any additional headers
        if(!empty($headers)) $ch->set_opt(CURLOPT_HTTPHEADER, $headers);

        $ch->exec();

        return array(
            'header' => $ch->header,
            'body'   => $ch->body
        );
    }

    /**
     * Read Header
     * A private method to be used by libcurl when reading header.
     *
     * @param   String      Curl Binded Resource
     * @param   String      Header String
     * @return  Integer     Header String Length
     */
    private function read_header($ch, $string)
    {
        $length = strlen($string);

        // Trim Header String
        $string = trim($string);

        // If not empty, push into header array
        if (!empty($string))
        {
            array_push($this->header, $string);
        }

        return $length;
    }

    /**
     * Read Body
     * A private method to be used by libcurl when reading body content.
     *
     * @param   String      Curl Binded Resource
     * @param   String      Body String
     * @return  Integer     Body String Length
     */
    private function read_body($ch, $string)
    {
        $length = strlen($string);

        // If not empty, push into body array
        if (!empty($string))
        {
            array_push($this->body, $string);
        }

        return $length;
    }

}

With the class above, what you need to do is just:

$response = Curl_lib::post('http://localhost/example.php', $post);

The $post as HTTP POST params and values to be posted to http://localhost/example.php'.
It can be $_POST too, as long as an associative array will do.

Yanıtı formatında:

$response = array(
    'header' => array(),
    'body'   => array(),
);

you can always use var_dump with xdebug to have a great view. print_r will is great too. Hope this help :)

Her iki sayfa üzerinde kontrolü var, neden koşullu değişmez? (Daha fazla koşul vardır örtmek Bu örnekte bütün $ 'POST ekleme)

if( empty($postData) ) {
  $postData = $_POST;
}

if ( $postData['post'] == true) { echo: 'hello, world'; }

Sonra sadece VAR ayarlamak ve dosya içerebilir:

$postData = array('post' => true);
include ( 'data.php' );

CURL göreli URL desteklemiyor, sen gibi bir şey yapmak gerekiyor

echo post('http://localhost/data.php', 'post=true');

Ayrıca sadece bu gibi sayfayı içerebilir,

<?php

$_POST['post'] = true;

include 'data.php';
?>