Все методы отправки POST из PHP.

Я всего лишь хотел дернуть данные с сайта за авторизацией и что получилось.
file_get_contents
file_get_contents - с его стримами, как оказывается метод позорный и много серверов тупо легко могут блокировать такой запрос к страницам. Для простой загрузки проверенных сайтов - метод просто незаменим. Очень прост и удобен.
Вот таким одностраничником можно загрузить данные POST запросом:
$result = file_get_contents($url, false, stream_context_create(array(‘http’ => array(‘method’ => ‘POST’,'header’ => ‘Content-Type: application/xml’,'content’ => $xml))));
Взято из
http://jkeks.ru/jkeks.ru/archives/3974
Отформатированный вариант:
pear:http_request
<?php
require_once "HTTP/Request.php";
$req =& new HTTP_Request("http://www.php.net");
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData("Foo", "bar");
if (!PEAR::isError($req->sendRequest())) {
$response1 = $req->getResponseBody();
} else {
$response1 = "";
}
$req->setMethod(HTTP_REQUEST_METHOD_GET);
$req->setURL("http://pear.php.net");
$req->clearPostData();
if (!PEAR::isError($req->sendRequest())) {
$response2 = $req->getResponseBody();
} else {
$response2 = "";
}
echo $response1;
echo $response2;
?>
Уроццкий метод, просто бесит смотреть в такую парашу. Конечно я бы мог причесать этот взятый из отсюда код:
http://pear.php.net/manual/pl/package.http.http-request.intro.php
Но и так видно, работает, но выглядит как отстой.
Pecl_Http
Что это за хрень - какое-то странное расширение PHP, для которого я примеров-то найти не смог, зато на php.net ГИГАНСКИЙ МАНУЛИЩЩЕ.
http://php.net/manual/en/book.http.php
Впрочем нашел кое-что поглядеть, надеюсь сами дадите примеров еще:
$request = Request::factory($url);
$request->method('POST');
$request->headers($header);
$request->post($post_params);
$request->execute();
Curl
Алелуйа !
Самый мировой метод, который используется в 90% случаев, но говорят и то не всегда работает.
<?php
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, 'http://mysite.ru/receiver.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "a=4&b=7");
$out = curl_exec($curl);
echo $out;
curl_close($curl);
}
?>
Код CURL безобразен как моя задница, что бы ни говорили.
Сокеты
Сразу задавлю примером:
$fp = fsockopen($url, 80, $errno, $errstr, 30);
if (!$fp) {
echo "ERROR: $errstr ($errno)<br />\n";
$error="ERROR: $errstr ($errno)";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .="User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1284.0 Safari/537.13\r\n";
$out .= "Host: $url\r\n";
$out .= "Referer: http://jkeks.ru";
$out .= "Connection: Close\r\n\r\n";
$out .= "\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$src.=fgets($fp, 128);
}
fclose($fp);
}
Это пример из жизни, Уродливее некуда, зато работает везде и всегда, никаких библиотек не надо, прямо слезы на глазах. Даже PHP4 хватит.
Snoopy
Прекрасный в идее класс
Snoopy. Обновление 2005-2008 годы. Но все делается более менее красиво:
<?php
include('Snoopy.class.php'); // подключаем «Snoopy»
$snoopy = new Snoopy(); // создаём объект
/* создаём массив «$post_array» */
$post_array = array();
$post_array['city'] = 'Odessa';
$post_array['country'] = 'Ukraine';
/* cоздаем Cookies */
$snoopy->cookies['last_visit'] = 1298295000;
$snoopy->cookies['nickname'] = 'Mirgorod';
$snoopy->submit('http://test.ru/submit.php', $post_array);
echo $snoopy->results; // выводим результат
?>
Я бы его взял, тем более использует сокеты (восновном), код не смотрел, бабка нашептала.
Multirequest
Еще один класс.
https://github.com/barbushin/multirequest
Говорят чем-то покруче чем Snoopy. Не првоерял , код смотрел, документации нет. Интересно но времени жалко.
Zend_http_client/Zend:http
Документация есть даже на Русском кое что. Большой, всемогущий, скучный.
Buzz – Simple HTTP Request Library
Buzz еще одна библиотечка для HTTP запросов. Вот пример кода:
1 |
$request = new Buzz\Message\Request('HEAD', '/', 'http://google.com'); |
2 |
$response = new Buzz\Message\Response(); |
4 |
$client = new Buzz\Client\FileGetContents(); |
5 |
$client->send($request, $response); |
Не смотрел еще и не разбирался, но вы обязательно поглядите.
Requests – Easy HTTP Requests
Requests библиотека позволит делать легко HTTP запросы. Если вы (как и я) никак не можете запомнить синтаксис Curl,то эта библиотека для вас, пример кода:
01 |
$headers = array('Accept' => 'application/json'); |
02 |
$options = array('auth' => array('user', 'pass')); |
03 |
$request = Requests::get('https://api.github.com/gists', $headers, $options); |
05 |
var_dump($request->status_code); |
08 |
var_dump($request->headers['content-type']); |
09 |
// string(31) "application/json; charset=utf-8" |
11 |
var_dump($request->body); |
12 |
// string(26891) "[…]" |
С этой библиотекой можно делать HEAD, GET, POST, PUT, DELETE и PATCH HTTP запросы, отправлять файлы и параметры в массивах и получать полный доступ к данным ответа.
Заключение:
Кажется этих способов море, однако чем-то мне нравится
Snoopy. Ну оно и понятно, название красивое..
Вот теперь можете бить.
Калькулятор
😉 ИИ за СБП
🚽 Бесплатная Раскуртка
🧮 Апдейты ИКС
🏆 История ТОП LinkFeed
🏆 История ТОП Trustlink