如何利用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 CLI实现简单的数据库实时监控调度
Jul 01 PHP
php学习之流程控制实现代码
Jun 09 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
php中cookie的使用方法
Mar 29 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php实现的简单检验登陆类
Jun 18 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
PHP迭代器接口Iterator用法分析
Dec 28 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
javascript字典探测用户名工具
2006/10/05 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python正则表达式中的括号匹配问题
2014/12/14 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python tornado使用流生成图片的例子
2019/11/18 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
珍珠鸟教学反思
2014/02/01 职场文书
综合管理员岗位职责
2015/02/11 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
老人节主持词
2015/07/04 职场文书
女儿满月酒致辞
2015/07/29 职场文书
初中语文教师研修日志
2015/11/13 职场文书
小学班级口号大全
2015/12/25 职场文书