PHP Как отправить сырой HTTP-пакет - PullRequest
6 голосов
/ 23 сентября 2009

Я хочу отправить необработанный http-пакет на веб-сервер и получить его ответ, но я не могу найти способ сделать это. я неопытен с сокетами, и каждая ссылка, которую я нахожу, использует сокеты, чтобы послать пакеты udp. любая помощь будет отличной.

Ответы [ 3 ]

7 голосов
/ 23 сентября 2009

Посмотрите на этот простой пример со страницы руководства fsockopen :

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

Соединение с сервером устанавливается с fsockpen. $out содержит HTTP-запрос, который затем отправляется с frwite. HTTP-ответ затем читается с fgets.

3 голосов
/ 23 сентября 2009

Если все, что вы хотите сделать, это выполнить запрос GET и получить тело ответа, большинство файловых функций поддерживают использование URL:

<?php

$html = file_get_contents('http://google.com');

?>

<?php

$fh = fopen('http://google.com', 'r');
while (!feof($fh)) {
    $html .= fread($fh);
}
fclose($fh);

?>

Для более чем простых GET используйте curl (вы должны скомпилировать его в php). С помощью curl вы можете выполнять запросы POST и HEAD, а также устанавливать различные заголовки.

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$html = curl_exec($ch);

?>
2 голосов
/ 23 сентября 2009

cURL проще, чем реализация HTTP на стороне клиента. Все, что вам нужно сделать, это установить несколько параметров, а cURL обрабатывает все остальное.

$curl = curl_init($URL);
curl_setopt_array($curl,
    array(
        CURLOPT_USERAGENT => 'Mozilla/5.0 (PLAYSTATION 3; 2.00)',
        CURLOPT_HTTPAUTH => CURLAUTH_ANY,
        CURLOPT_USERPWD => 'User:Password',
        CURLOPT_RETURNTRANSFER => True,
        CURLOPT_FOLLOWLOCATION => True
        // set CURLOPT_HEADER to True if you want headers in the result.
    )
);
$result = curl_exec($curl);

Если вам нужно установить заголовок, который не поддерживает cURL, используйте опцию CURLOPT_HTTPHEADER, передавая массив дополнительных заголовков. Установите CURLOPT_HEADERFUNCTION для обратного вызова, если вам нужно проанализировать заголовки. Прочитайте документы для curl_setopt для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...