如何利用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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
php 设计模式之 单例模式
Dec 19 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
解析MySql与Java的时间类型
Jun 22 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
PHP实现C#山寨ArrayList的方法
Jul 16 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 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
php at(@)符号的用法简介
2009/07/11 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python2.7的编码问题与解决方法
2016/10/04 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
Python实现数字的格式化输出
2020/08/01 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Android面试题及答案
2015/09/04 面试题
应届生服装设计自我评价
2013/09/20 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
社区党员先进事迹
2014/01/22 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
生产厂长岗位职责
2014/02/21 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
初三化学教学反思
2016/02/22 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
mysql配置SSL证书登录的实现
2021/09/04 MySQL
Python+Tkinter打造签名设计工具
2022/04/01 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js