PHp + socket编程练习——博客园回复

因为也是学习的路上,先画出思路,代码和看别人的学习的,最后是根据的思路完成的,可能比较简单,后期在去完善和更改

<?php
/**
 * php+socket 编程 发送HTTP请求
 * @version  c.php
 * 模拟博客园评论
 */
interface Proto{
	// 连接url
	public function conn($url);
	// 发送get请求
	public function get();
	// 发送post请求
	public function post($body);
	//关闭连接
    public function close();
}
class Http implements Proto{
	protected $response = ‘‘;
	protected $fh=null;
	protected $errno = -1;
	protected $errorstr = ‘‘;

	protected $line = array();
	protected $header = array();
	protected $body = array();
	public $url = array();

	public function __construct($url){
		$this->conn($url);
		$this->setHeader(‘Host: ‘ . $this->url[‘host‘]);
	}
	// 请求行
	protected function setLine($method){
		$this->line[0] = $method . ‘ ‘ . $this->url[‘path‘] .  ‘ ‘ . ‘HTTP/1.1‘;
	}
	// 头信息
	public function setHeader($headerline){
		$this->header[] = $headerline;
	}
	// 主体信息
	protected function setBody($body){
                $this->body[] = http_build_query($body);
	}
	// 连接url
	public function conn($url){
		$this->url = parse_url($url);
		if(!isset($this->url[‘port‘])){
			$this->url[‘port‘] = 80;
		}
		$this->fh = fsockopen($this->url[‘host‘],$this->url[‘port‘],$this->errno,$this->errorstr,3);
	}
	// 构建get请求
	public function get(){
		$this->setLine(‘GET‘);
		$this->request();
		return $this->response;
	}
	// 发送post请求
	public function post($bo){
		$this->setLine(‘POST‘);
                // content-type
                $this->setHeader("Content-type: application/x-www-form-urlencoded");

                $this->setBody($bo);
                // content-length
                $this->setHeader("Content-length: " .strlen($this->body[0]));
                $this->request();
                return $this->response;
	}
	public function request(){
		$req = array_merge($this->line,$this->header,array(‘‘),$this->body,array(‘‘));
		//print_r($req);die;
		$req = implode(PHP_EOL,$req); // PHP_EOL 换行
//		echo $req;die;
		fwrite($this->fh,$req);
		while(!feof($this->fh)){
			$this->response .= fread($this->fh,1024);
		}
		$this->close();
	}
	public function close(){
            fclose($this->fh);
	}
}

上面是简单的类

<?php

require("./c.php"); // 引入上面的类
$url = "http://www.cnblogs.com/mvc/PostComment/Add.aspx";
$http = new Http($url);
$http->setHeader("Cookie:xxxx");
$http->setHeader("Referer: http://www.cnblogs.com/geek12/p/4024793.html");
$http->setHeader("User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0");

$msg =array(
"blogApp"=>"geek12",
"body"=>"来自robot",
"parentCommentId"=>0,
"postId"=>4024793);

$http->post($msg);

发送成功的截图

在写的过程中遇到的几个问题,根据请求的url 不一样,请求头的拼接也需要改变,这里请求的url是 http://www.cnblogs.com/mvc/PostComment/Add.aspx  静态的连接,所有path 直接拿到后面的,如果是动态的就需要修改了,所以本方法只适合静态的连接,动态的需要修改请求头

不是所有的网站都可以模拟,虽然没有验证码,我在VeryCd 网站,怎么模拟都没有成功,最后只好放弃了

我是菜鸟,请不要抨击,待续。。。。

时间: 2024-11-12 08:29:54

PHp + socket编程练习——博客园回复的相关文章

博客园目录导航 持续更新中~~

目录 博客园目录导航 python语言学习 python基础入门 python函数 python模块 python面向对象 网络编程 并发编程 Mysql数据库 初识数据库 mysql数据库安装 mysql支持数据类型 SQL语句 mysql约束 单表多表查 SQL注入风险 web前端 HTML CSS JavaScript Vue jQuery Bootstrap Django框架 Flask框架 算法 爬虫 人工智能 博客园装饰 博客园目录导航 python语言学习 python基础入门 计

论知乎是如何评论博客园与CSDN的!!

发现很多人在用博客园,CSDN博客也有人在用(自己一般也在用). 但是发现博客园的界面简洁大气,而CSDN却是更加商务化,广告也多. 去知乎搜索了一下,意见层次不齐,但各有各的好,看图说话: 来源知乎(若侵权立删) 1. 2. 3. 4.有人说:博客园上边电子书资源好少,CSDN现在又卖得贼贵.且行且珍惜 5.也有人说: 博客园在手机浏览器上的适配体验还不错,反倒app版有点太鸡肋. csdn功能太多,页面太杂了,我只想纯粹的看看博客. 所以我选简书. 6.还有人说: 个人会喜欢CSDN,博客园

10年C#之旅,终获MVP,感谢博客园这个舞台。。。。。

        本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html  1.意外的惊喜 10月份收到微软总部寄来的荣誉证书,非常激动,虽然有些小波折,但还算顺利.本人8月份提交申请后来就没注意过,而且邮箱也没有收到邮件,所以没在意.收到联邦快递的电话着实下了一跳,欣喜之余,感谢所有人的支持,同时感谢博客园这个大舞台.10年前偶尔的一次C#选修课,让我接触它,10年后,我用它来作为一个密不可分的工具来解决工作和生活中的问题,唯一的感

在Python中用Request库模拟登录(二):博客园(简单加密,无验证码)

源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind('click', function () { 3 signin_go(); 4 }).val('登 录'); 5 }); $(functio

吉特仓库管理系统- 可恶行径我该怎么维权--51aspx.com 侵权,希望博客园不要删除此文章

工作已经累了一天了,下班之后还在想着整理吉特仓储管理系统中所遇到的打印问题,这些天写了两篇关于吉特仓储管理系统打印相关的文章,都是自己开发实施过程中遇到的实际问题想和各位分享一下.吉特仓储管理系统是本人经过多年积累开发起来的,到目前有几十家企业客户在使用中.在前不久剥离了固化的业务部分,整理出来了一个开源版本托管在了github上:https://github.com/hechenqingyuan/gitwms 供大家学习和参考. 刚准备躺下睡觉,有网友在博客中留言说自己开源的吉特仓储管理系统被

博客园积分与排名升级攻略(转)

博客园积分算法探讨 今天在dudu的<博客园FAQ>上看到了博客积分算法规则.因为同样是搞互联网的,平时工作也涉及到用户积分算法的设计,所以特把此问题拿出来分析探讨.初衷只是纯学术的研究探讨,并不构成对博客园积分机制的意见建议. 我们先来看看现行规则,用公式表示为:-------------------------------------------------------------------BlogScore = BeRead + 10 * BeComment + 50 * Commen

python爬虫:两种方法模拟登录博客园

第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind

简易nodejs爬虫抓取博客园指定用户的文章及浏览量

需要安装nodejs和cheerio模块 实现了自定义用户,自定义页数,抓取完毕自动停止无重复 可以按需修改文章类和评论的类名 用法: 首先 npm install cheerio 执行 node cnblog [username] 文件结果保存在res/cnblog.txt //cnblog.jsvar http = require('http') var fs = require('fs') var path = require('path') var cheerio = require('

博客园—Android客户端

如果有一个博客园客户端支持:点赞.支持.反对.评论.@.收藏等等等等,那么博客园的新闻.博文评论区是否能更加活跃?园友能否更加积极?进步能否更加快速?博客园能否更加精彩?一起来看看吧. 笔者业余开发的博客园Android客户端版本首次在博客园公布,希望广大园友多多支持,极速省流稳定,当然阅读界面由于每个人写的博客千差万别,不像新闻一样有专业小编统一的编码,笔者仅能用正则做到尽量格式化,做的不好的地方请见谅. 当前版本支持的功能有以下这些:博客园所有分类查看.支持博客新闻点支持和反对.评论支持和反