2011-12-21 3 views
3

Учитывая, что я не хочу использовать завиток, который является допустимой альтернативой для создания запроса на отправку? Может быть Zend_http_client?Как сделать заявку без завивки?

мне просто нужна основные вещи (мне нужно запросить URL только один пост пар)

+0

Вы предпочли бы развернуть рамки чем использовать cURL? –

+0

@webarto: развертывание? Для рамки Zend нужен только один путь. И с этим вы можете получить доступ к таким большим количествам, которые стоят того, что стоит – dynamic

ответ

0

Если вы используете Zend Framework уже вы должны попробовать Zend_Http_Client вы упомянули:

$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(); 
+0

Нет, я не использую фреймворк zend, но, учитывая это, я должен начать сейчас: D – dynamic

+0

может захотеть проверить, но Zend может просто быть обертыванием curl – Ascherer

+0

В любом случае Если я хочу просто использовать zend_http_client в моей структуре, есть ли у вас учебник по установке? Или использовать zend_http_client я должен использовать всю структуру? – dynamic

1

Вы можете реализовать его самостоятельно через сокеты:

$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; 

Конечно, вы должны изменить его, чтобы заполнить ваши потребности или обернуть его в функцию.

22

Вы можете использовать file_get_contents().

Руководство по PHP имеет хороший example here. Это просто скопировать прошлое из руководства:

$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); 
+0

Супер легкий способ получить работу! Благодарю. –

0

Самый простой способ, если у вас есть PHP сконфигурирован с pecl_http является:

$response = http_post_data($url, $post_params_string);

Функция документированной на php.net:

PECL также предоставляет хорошо документированный способ справиться с Cookies, перенаправлений, аутентификации и т.д. до POST:

http://php.net/manual/en/http.request.options.php

1

вы можете использовать stream_context_create и 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); 
Смежные вопросы