PHP更原始的发送http请求方式
23-09-27 17:00
字数 1675
阅读 2075
已编辑
项目中通常使用file_get_contents和curl,除此之外,通过fopen,fsockopen,stream_socket_client等也可实现,示例过于简单,仅供了解
$url = 'https://www.baidu.com/';
$urlArr = parse_url($url);
$path = $urlArr['path'] ?? '/';
$data = "GET $path HTTP/1.1" . PHP_EOL;
$data .= "Host: {$urlArr['host']}" . PHP_EOL;
$data .= "Connection: Close" . PHP_EOL . PHP_EOL;
// fopen
$resource = fopen($url, 'r');
if (!$resource) {
echo 'Connect failed' . PHP_EOL;
exit;
}
fwrite($resource, $data);
$content = '';
while (!feof($resource)) {
$content .= fgets($resource);
}
echo $content . PHP_EOL;
fclose($resource);
// fsockopen
$resource = fsockopen('ssl://' . $urlArr['host'], 443, $errorCode, $errorMsg);
//$resource = fsockopen('tcp://' . $urlArr['host'], 80, $errorCode, $errorMsg);
if (!$resource) {
echo sprintf('Connect failed, errorCode: %d, errorMsg: %s', $errorCode, $errorMsg) . PHP_EOL;
exit;
}
fwrite($resource, $data);
$content = '';
while (!feof($resource)) {
$content .= fgets($resource);
}
echo $content . PHP_EOL;
fclose($resource);
// stream_socket_client
$resource = stream_socket_client('ssl://' . $urlArr['host'] . ':443', $errorCode, $errorMsg);
//$resource = stream_socket_client('tcp://' . $urlArr['host'] . ':80', $errorCode, $errorMsg);
if (!$resource) {
echo sprintf('Connect failed, errorCode: %d, errorMsg: %s', $errorCode, $errorMsg) . PHP_EOL;
exit;
}
fwrite($resource, $data);
$content = '';
while (!feof($resource)) {
$content .= fgets($resource);
}
echo $content . PHP_EOL;
fclose($resource);
// 响应header和body
$separator = '/\r\n\r\n|\n\n|\r\r/';
list($header, $body) = preg_split($separator, $content);
echo $header . PHP_EOL;
echo $body . PHP_EOL;
0人点赞>
0 条评论
排序方式
时间
投票
快来抢占一楼吧
请登录后发表评论
相关推荐
文章归档
最新文章
最受欢迎
23-09-27 17:00
23-09-03 10:57
23-09-02 17:11
23-07-23 00:06
3 评论
2 评论
1 评论