如何利用http协议发布博客园博文评论


Posted in PHP onAugust 03, 2015

先给大家介绍下实现原理:

给博文提交评论的实质就是通过http协议服务器发送一个post请求。在发布评论前,我们需要做什么呢?对,是必须要登录的。但登录是另一件事情,我们这里先不讨论。用户登录后,服务器给客户端设置一个cookie。http是无状态的。也就是说客户端向服务器发送请求后,服务器返回响应。一次通信完成。服务器不会记得刚才是谁向自己发送请求。所以客户端需要拿着服务器给自己设定好的cookie向服务器发送请求并告知服务器自己的身份,服务器根据cookie产生响应。

准备工作:

为了完成本次测试,我又注册了一个博客园小号(DeanHuangChopper),登录博客园后,打开我博客(DeanChopper),随便打开我的一篇博文,例如《结合php ob函数理解缓冲机制》一文(我用的是火狐浏览器,最大优点是向服务器发送什么参数可以很直观地看出来了),打开开发者选项,准备记录发送评论的过程。我随便写一评论,发表评论。这一次请求通过已经开发者选项记录下来。

如何利用http协议发布博客园博文评论

我们只需要关注请求头就好了。

很明显,我们通过Http类的setHeader()方法设置好请求头信息,通过post()方法发送就可以了。我们先仔细分析下请求头信息。Host和Content-type,Contetn-length会默认通过http的一些方法设置好,我们可以不添加。但必须注意的是Content-type类型是"application/json; charset=UTF-8",有别于Http默认设置的“application/x-www-form-urlencoded”。请求体是json形式,而非数组形式,因而原来的Http post方法需要重新写一下。

public function post($body) {  
  $this->setLine('POST');

  // 重新设置content-type
  $this->setHeader('Content-Type:application/json; charset=UTF-8');
  
  // 跳过setBody方法
  // $this->setBody($body);
  $this->body[]=$body;

  // 计算content-length
  $this->setHeader('Content-length: ' . strlen($this->body[0]));

  $this->request();

  return $this->response;
 }

在重新修改Http类后,我们便可以完成本文的主要代码的编写了。虽然按理论来说,设置头信息时只要设置cookie值就好了,但是将最好将头信息全部发送以提高成功率。

在发送评论之前,看一下发送的参数:如何利用http协议发布博客园博文评论

我们只需要将想要发送的内容填写到"body"后面就可以了。

代码部分:

最后是本文的主要代码:

<?php

require "http.class.php";


$http=new Http('http://www.cnblogs.com/mvc/PostComment/Add.aspx');
//设置头信息
$http->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3');
$http->setHeader('Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3');
$http->setHeader('Accept-Encoding:gzip, deflate');
$http->setHeader('X-Requested-With:XMLHttpRequest');
$http->setHeader('Referer:http://www.cnblogs.com/DeanChopper/p/4688667.html');
$http->setHeader('Cookie:_ga=GA1.2.1359064105.1438444082; __gads=ID=e0c32fd6db6e2a6d:T=1438443900:S=ALNI_Mb6AAflcBD6gcdHgeE3IqVDJYnnjA; .CNBlogsCookie=C8013C91E54C151DEDA30E2C1E842982338C9054A8BB8639AC2DAB7578445BF1DF5BC49D39D8BE5FDAC33541CE4E4FA386CFD3F946EA1D79D1E34809A4CCBD7488A15641AEF685A6258CF3F03597BCAF50049F8C95A310076677598990FB2E4FB1E9671A; _5t_trace_sid=84a9ed0b086c2c127551cf911bec7b1d; _5t_trace_tms=1; _gat=1');
$http->setHeader('Pragma:no-cache');
$http->setHeader('Cache-Control:no-cache');

//设置请求体信息
$msg='{"blogApp":"DeanChopper","postId":4688667,"body":"测试内容","parentCommentId":0}';

//发送post请求
$http->post($msg);

echo 'OK';

发送过程可能有点慢,请耐心等待。

以上介绍就是本文的全部内容,希望大家喜欢。

PHP 相关文章推荐
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php实现的简单日志写入函数
Mar 31 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
实例讲解PHP表单
Jun 10 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 #PHP
如何使用php实现评委评分器
Jul 31 #PHP
php给图片加文字水印
Jul 31 #PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 #PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 #PHP
php使用Imagick生成图片的方法
Jul 31 #PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 #PHP
You might like
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
php时间戳转换代码详解
2019/08/04 PHP
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
Scrapy的简单使用教程
2017/10/24 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
python快排算法详解
2019/03/04 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
计算机求职信
2013/12/01 职场文书
2014年销售部工作总结
2014/12/01 职场文书
家长会主持词开场白
2015/05/29 职场文书
演讲开场白和结束语
2015/05/29 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书