小滕的博客

小滕的技术点滴

利用PHP的socket发起HTTP请求

3 weeks ago · 0 MIN READ

直接上代码:

<?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!socket_connect($socket, '58hualong.cn', 80)) {
    exit(sprintf('58hualong.com connect error.message:%d', socket_last_error($socket)));
}

$message = "GET / HTTP/1.1\r\n";
$message .= "Host: 58hualong.cn\r\n\r\n";
$message .= "";

if (!socket_send($socket, $message, strlen($message), MSG_EOF)) {
    exit('send message error.message:' . socket_last_error($socket));
}

// 返回
$response = '';
socket_recv($socket, $response, 1024 * 14, MSG_WAITALL);
echo $response;

// 关闭连接
socket_close($socket);

首先,socket_create 创建一个 socket 资源,然后 socket_connect 连接到目标服务器,连接成功之后,利用 socket_send 发送一条HTTP协议信息到服务端,服务端判断是HTTP请求就会正常处理,然后返回数据,这里我们利用 socket_recv 用来接收服务端返回的消息,需要注意的一点是 socket_revc 的第二个参数是读取服务端内容的长度,第三个参数是决定什么时候读取完,这里我们选择的是 MSG_WAITALL 也就意味着我们配置的读取缓冲区满了才会返回,当然也可以选择 MSG_EOF ,但是在HTTP里面不行。

···

xiao teng



备案号:皖ICP备14012032号-5