在共享主机上打开套接字

时间:2011-07-21 10:37:12

标签: php sockets

我正在尝试使用以下代码在主机上打开套接字:

$timeout = 10;
$s = stream_socket_client('mywebsite.com:80', $errcode, $errstring, $timeout);
$message = "GET /index.php HTTP/1.0\r\n\r\n";
fwrite($s, $message);
while(!feof($s)){
    echo fread($s, 1024);
}

没什么特别的,只是我发现的一个例子。问题是,每次运行代码时,我都会得到不同的文件。我认为这是因为主持人是共享主持人。

有没有办法克服这个问题,也就是说,可靠地拉出我想要的正确文件?

谢谢。

2 个答案:

答案 0 :(得分:3)

在HTTP请求中,您必须指定要访问的主机。正如您所指出的,多个DNS条目可以指向相同的IP地址。

$message = "GET /index.php HTTP/1.1\r\nHost: hostname.com\r\n\r\n";

答案 1 :(得分:1)

您需要发送Host标头来指定域名 - 一台服务器托管多个网站非常常见:

$message = "GET /index.php HTTP/1.1\r\nHost: www.example.com\r\n\r\n";

注意(正如@ Darhazer指出的那样){id}}请求标头仅在HTTP / 1.1之后定义,因此您无法使用HTTP / 1.0。可以使用绝对URL,如

Host

但这违反了HTTP/1.0

  

只有在向代理发出请求时才允许使用absoluteURI表单。

并且目标服务器显然不是代理服务器,因此产生的行为不可靠。