文件写入-php用fsockopen来GET网页 就是不成功 觉得是fread那里有问题 求大神解答

问题描述

php用fsockopen来GET网页 就是不成功 觉得是fread那里有问题 求大神解答

<?php
class Http {

const CRLF = " ";

protected $fp = null;
protected $errno = -1;
protected $errstr = 'error';
protected $fenxi = array();
protected $method = '';
protected $out = '';
//我觉得不需要下面两个
protected $lineone = array();
protected $linetwo = array();

public function __construct($url) {
$this->conn($url);
//$this->same($this->method);
}

public function __destruct() {
$this->close();
}

public function conn($url) {
$this->fenxi = parse_url($url);
if (empty($this->fenxi['port'])) {
$this->fenxi['port'] = 80;
}

$this->fp = fsockopen($this->fenxi['host'], $this->fenxi['port'], $this->errno, $this->errstr, 3);
if (!$this->fp) {
echo $this->errstr;
}

}

public function same($method) {
$this->lineone[0] = $method . ' ' . $this->fenxi['path'] . ' ' . 'HTTP/1.1';
$this->linetwo[0] = 'Host:' . ' ' . $this->fenxi['host'];
$arr = array_merge($this->lineone, $this->linetwo);
$string = implode(self::CRLF, $arr);

if ($method == 'GET') {
$this->get($string);
} elseif ($method == 'POST') {
$this->post($string);
} else {
echo "method error";
exit;
}
}

public function get($str) {
//如果还要写别的东西 写在下面拼接

//这里直接处理$str
fwrite($this->fp, $str);

while (!feof($this->fp)) {
$this->out .= fread($this->fp, 1024);
echo "ok";exit;
}

$this->show();

}

public function post($str) {

}

public function close() {
fclose($this->fp);
}

public function show() {
echo $this->out;
}

}

$test = new Http('http://news.163.com/13/0613/09/9187CJ4C00014JB6.html');
$test->same('GET');

?>

解决方案

要把http相关协议参数补齐,还有最后面要加两个换行。另外get代码里read了第一次后就exit了,所以没有调用show()。下面是改后的代码。

     public function same($method) {
        $string = implode(self::CRLF,
            [$method . ' ' . $this->fenxi['path'] . ' ' . 'HTTP/1.1',
             'Host:' . $this->fenxi['host'],
             'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3',
             'Connection:close',
             '',
             ''
            ]);
        echo $string;
        if ($method == 'GET') {
            $this->get($string);
        } elseif ($method == 'POST') {
            $this->post($string);
        } else {
            echo "method error";
            exit;
        }
    }

    public function get($str) {
        //如果还要写别的东西 写在下面拼接
        var_dump($this->fp);
        //这里直接处理$str
        $result = fwrite($this->fp, $str);

        while (!feof($this->fp)) {
            $read = fread($this->fp, 1024);
            $this->out .= $read;
        }
        $this->show();
    }

时间: 2024-10-02 14:10:13

文件写入-php用fsockopen来GET网页 就是不成功 觉得是fread那里有问题 求大神解答的相关文章

javascript-为啥网页看不到点击图片的效果呢?求大神解答

问题描述 为啥网页看不到点击图片的效果呢?求大神解答 <script type=""text/javascript"">function load(){ alert('hi!'); }function click(){ var username=prompt('what is your name?''enter your name here.'); if(username && username!='enter your name her

使用Template模板生成了脚本后怎么把这个脚本的内容写入到一个txt文件中呢?求大神解答

问题描述 使用Template模板生成了脚本后怎么把这个脚本的内容写入到一个txt文件中呢?求大神解答 public static void main(String[] args) throws Exception { Map map = new HashMap(); Configuration cfg = new Configuration(); Template t = cfg.getTemplate("src/main/webapp/model/sqoop_header.ftl"

浏览器不知道怎么了,进不去网页,出现以下这个界面,这种情况怎么解决?求大神解答

问题描述 浏览器不知道怎么了,进不去网页,出现以下这个界面,这种情况怎么解决?求大神解答 400Bad Request 400 Bad Request nginx 解决方案 除了q107770540 说的这些,看一下DNS cache 解决方案二: 打开IE 在"Internet选项"里选择删除COOKIES 删除文件就可以了答3023案补充够详细的了.答3023案补充打开IE(你看网页的那个),然后点"工具"--Internet选项--Internet临时文件--

java-为什么这三段代码写出来的文件没有区别,求大神解答

问题描述 为什么这三段代码写出来的文件没有区别,求大神解答 File f=new File("d:/text1.txt"); FileOutputStream outfile=new FileOutputStream(f,true); try { for(int i='A';i<='Z';i++) outfile.write(i); outfile.write('t'); byte b[]="java程序设计".getBytes(); outfile.writ

socket-JAVA代理服务器,用浏览器打开的时候显示的网页信息总是不全,有时候显示不出来,求大神帮我看看

问题描述 JAVA代理服务器,用浏览器打开的时候显示的网页信息总是不全,有时候显示不出来,求大神帮我看看 package work; import java.io.*; import java.net.*; public class MMProxy extends Thread { static public int CONNECT_RETRIES = 5; //尝试与目标主机连接次数 static public int CONNECT_PAUSE = 5; //每次建立连接的间隔时间 stat

jbpm上传打包好的zip文件,然后上传完说发布流程文件失败,求大神解答

问题描述 jbpm上传打包好的zip文件,然后上传完说发布流程文件失败,求大神解答 工具:MyEclipse10.0 jbpm4.4 数据库版本是Mysql5.1 下面是jsp页面代码 jsp页面代码 <%@page import="java.util.zip.ZipInputStream"%> <%@page import="java.io.File"%> <%@page import="java.io.FileInputS

vc zip,unzip类 解压.docx文件内容是乱码,求大神解答啊

问题描述 vc zip,unzip类 解压.docx文件内容是乱码,求大神解答啊 目前只有.docx文件解压有问题,为什么会这样,求大神帮忙解答下,我没有c币,谢谢好心人了!!!! 解决方案 可以换成ZLib开源代码来试试,很不错,也很简单 解决方案二: 可以换成ZLib开源代码来试试,很不错,也很简单 解决方案三: 我发现.odcx文件用office可以打开,我用的wps,呵呵,找了一天原因,真坑爹 还是谢谢你的回答

indows编程 句柄-关于winnt.h头文件中有关句柄(HANDLE)的一段源代码的两个疑问,求大神解答。

问题描述 关于winnt.h头文件中有关句柄(HANDLE)的一段源代码的两个疑问,求大神解答. 大家好!我对winnt.h中的这段代码有疑问: #ifdef STRICT typedef void *HANDLE; #if 0 && (_MSC_VER > 1000) #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name #else #define DECLARE_HANDLE(nam

嵌入-网页上如何接入类似YY的实时视频系统?求大神指导

问题描述 网页上如何接入类似YY的实时视频系统?求大神指导 大神们好: 我们的网页上需要嵌入一个像YY一样的一个实时视频聊天系统,能视频.能语音.能文字输入的一个实时系统! 该方面的软件或者服务应该需要购买第三方公司的,我需要在自己的页面上接入他的这个东西,求做过的大神,或者做相关系统的大神们指导,大概都需要做什么工作,难点是什么,主要的技术点等!!! 解决方案 http://blog.csdn.net/zhao520100000/article/details/21809199