繁体   English   中英

PHP如何发送原始HTTP数据包

[英]PHP How To Send Raw HTTP Packet

我想将一个原始的HTTP数据包发送到网络服务器并收到它的响应,但我无法找到一种方法来做到这一点。 我不熟悉套接字和我找到的每个链接使用套接字发送udp数据包。 任何帮助都会很棒。

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发送。 然后使用fgets读取HTTP响应。

如果您只想执行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);

?>

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的文档以获取更多选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM