如何利用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 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
php在文件指定行中写入代码的方法
May 23 PHP
php获取访问者IP地址汇总
Apr 24 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
php递归函数怎么用才有效
Feb 24 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
java解析json方法总结
May 16 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
详解Laravel制作API接口
May 31 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
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
详解webpack分离css单独打包
2017/06/21 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python访问类中docstring注释的实现方法
2015/05/04 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
女性时尚网购:Chic Me
2019/07/30 全球购物
西北政法大学自主招生自荐信
2014/01/29 职场文书
八年级数学教学反思
2014/01/31 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
就业导师推荐信范文
2015/03/27 职场文书
埃及王子观后感
2015/06/16 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python