$out = "GET / HTTP/1.1\r\n"; //以GET的方式獲得根目錄文件,至于獲得哪個文件,要看HTTP服務器的設置多數是index.php....等,使用的 HTTP協議版本是1.1
$out .= "Host: www.example.com\r\n"; //主機URL或地址
$out .= "Connection: Close\r\n\r\n"; //響應請求后關閉鏈接。
fwrite($fp, $out); 打开www.example.com 的80 端口 写入$out 吗?
写入 $out 的类型 怎么是那种形式呢?那种形式表示什么意思?
//這個就是發送請求原語,至于怎么寫,請看HTTP協議,不是我這個菜鳥三言兩語能說明白的说 权限问题?不知道是怎么回事,还有
---------------------
HTTP/1.1 403 Forbidden Date: Tue, 10 Apr 2007 08:00:53 GMT Server: Apache/2.0.52 (Red Hat) Content-Length: 405 Connection: close Content-Type: text/html; charset=iso-8859-1
---------------------------
是什么意思???
//響應你的請求,403是禁止訪問,出現這個問題的原因比較多。。還有后面很多我就不一一解釋了。我又把 www.example.com 换成 www.xxx.com/test (www.xxx.com 的一个目录下)
在运行这个程序.
结果出现
Connection refused (111)
连接错误. 连 fsockopen 的函数都不行了.
//如果要請求某個目錄和文件應該在請求原語中設置。。
所以正確的是
$fp = fsockopen("www.xxx.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /test/ HTTP/1.1\r\n"; //这是什么意思?
$out .= "Host: www.xxx.com\r\n"; //这是什么意思?
$out .= "Connection: Close\r\n\r\n"; //这是什么意思?

解决方案 »

  1.   

    多谢 willko:fwrite($fp, $out); 这个是原语.我现在不问你是怎么写的.我想问它写到哪去???
    fsockopen("www.example.com", 80, $errno, $errstr, 30);
    fsockopen----------Open Internet or Unix domain socket connection 
    难道是打开 www.example.com 中定义的80 端口?  --不好表达我的意思.在socket通讯中,不是需要一个 服务器端和一个 客户端吗?
    那这段 列子说明 什么 ---客户端??
    echo fgets($fp, 128);  -------这个是从$fp中读出 刚才所写入的东西吧?
      

  2.   

    模拟http访问??
    一下子让我明白了许多.自己来回答一下自己刚才的问题:fwrite($fp, $out); 这个是原语.我现在不问你是怎么写的.我想问它写到哪去???  ///他是http协议的机制.我还是不知道
    fsockopen("www.example.com", 80, $errno, $errstr, 30);
    fsockopen----------Open Internet or Unix domain socket connection 
    难道是打开 www.example.com 中定义的80 端口?  --不好表达我的意思.===========
      想当于访问了 www.example.com  的80端口在socket通讯中,不是需要一个 服务器端和一个 客户端吗?
    那这段 列子说明 什么 ---客户端??--------这段 列子说明模拟http访问.
    echo fgets($fp, 128);  -------这个是从$fp中读出 刚才所写入的东西吧?-=-----应该可以说是.
      

  3.   

    继续问:
    既然是模拟http访问:我将 www.example.com 换成其他的为什么就不行了呢?我换成www.phpx.com
    <?php
    $fp = fsockopen("www.phpx.com", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET / HTTP/1.1\r\n";               
        $out .= "Host: www.phpx.com\r\n";       
        $out .= "Connection: Close\r\n\r\n";   
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
    ?> 结果是 Connection refused (111)..
    也就是 在$fp = fsockopen("www.phpx.com", 80, $errno, $errstr, 30); 出错.
    这是什么原因呢?
      

  4.   

    你的服务器是否有 解析功能. 
    将 www.phpx.com 换成ip 试试
      

  5.   

    是不是你的防火墙拦截了APACHE2对外访问?或者试试用IE能不能访问www.phpx.com?
      

  6.   

    用curl函数库把,不要这么折腾