Come fare una richiesta post senza curl?

Considerando che non voglio usare curl, che è una valida alternativa per fare una richiesta post? Forse Zend_http_client?

Ho solo bisogno di cose di base (di cui ho bisogno per la richiesta di un url con un solo post param)

Si preferisce distribuire quadro di utilizzare cURL?
distribuire? Zend framework ha bisogno solo di un percorso di inclusione. E con che è possibile accedere a tanti tratti che vale la pena

OriginaleL’autore dynamic | 2011-12-21

6 Replies
  1. -2

    Se si utilizza il Framework Zend già si dovrebbe provare il Zend_Http_Client che hai citato:

    $client = new Zend_Http_Client($host, array(
                'maxredirects' => 3,
                'timeout'      => 30));
    $client->setMethod(Zend_Http_Client::POST);
    //You might need to set some headers here
    $client->setParameterPost('key', 'value');
    $response = $client->request();
    no, non sto utilizzando zend framework, ma considerando questo dovrei iniziare ora 😀
    potrebbe voler controllare, ma Zend potrebbe essere solo avvolgimento curl
    Comunque Se voglio solo utilizzare zend_http_client nel mio quadro, c’è un tutorial di installazione per questo? O utilizzare zend_http_client devo usare tutti i framework?
    Ok, è stato abbastanza facile, set include il percorso e vai

    OriginaleL’autore Daff

  2. 29

    Si potrebbe utilizzare file_get_contents().

    Il manuale di PHP ha un bel esempio qui. Questa è solo la copia passato dal manuale:

    $postdata = http_build_query(
        array(
            'var1' => 'some content',
            'var2' => 'doh'
        )
    );
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
    $context  = stream_context_create($opts);
    $result = file_get_contents('http://example.com/submit.php', false, $context);
    Super facile per ottenere il lavoro fatto ! Grazie.
    non funziona affatto

    OriginaleL’autore Audun Larsen

  3. 2

    È possibile implementare autonomamente tramite socket:

        $url = parse_url(''); //url
        $requestArray = array('var' => 'value');
        $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_connect($sock, $url['host'], ((isset($url['port'])) ? $url['port'] : 80));
        if (!$sock) {
            throw new Exception('Connection could not be established');
        }
    
        $request = '';
        if (!empty($requestArray)) {
            foreach ($requestArray as $k => $v) {
                if (is_array($v)) {
                    foreach($v as $v2) {
                        $request .= urlencode($k).'[]='.urlencode($v2).'&';
                    }
                }
                else {
                    $request .= urlencode($k).'='.urlencode($v).'&';
                }
            }
            $request = substr($request,0,-1);
        }
        $data = "POST ".$url['path'].((!empty($url['query'])) ? '?'.$url['query'] : '')." HTTP/1.0\r\n"
        ."Host: ".$url['host']."\r\n"
        ."Content-type: application/x-www-form-urlencoded\r\n"
        ."User-Agent: PHP\r\n"
        ."Content-length: ".strlen($request)."\r\n"
        ."Connection: close\r\n\r\n"
        .$request."\r\n\r\n";
        socket_send($sock, $data, strlen($data), 0);
    
        $result = '';
        do {
            $piece = socket_read($sock, 1024);
            $result .= $piece;
        }
        while($piece != '');
        socket_close($sock);
        //TODO: Add Header Validation for 404, 403, 401, 500 etc.
        echo $result;

    Naturalmente, che si per cambiare per soddisfare le vostre esigenze, o avvolgerlo in una funzione.

    OriginaleL’autore TimWolla

  4. 1

    è possibile utilizzare stream_context_create e file_get_contents

    <?php
    $context_options = array (
            'http' => array (
                'method' => 'POST',
                'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
                    . "Content-Length: " . strlen($data) . "\r\n",
                'content' => $data
                )
            );
    ?>
    
    
    $context = stream_context_create($context_options); 
    $data = file_get_contents('http://www.php.net', false, $context);

    OriginaleL’autore Saurabh Chandra Patel

Lascia un commento