如何利用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 19 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
php桥接模式应用案例分析
Oct 23 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
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php经典算法集锦
2015/11/14 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
jQuery中append()方法用法实例
2015/01/08 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
利用python 下载bilibili视频
2020/11/13 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
高中政治教学反思
2014/01/18 职场文书
高中生期末评语大全
2014/01/28 职场文书
文明寄语大全
2014/04/11 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
幼儿园辞职书
2015/02/26 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
2015最新民情日记范文
2015/06/26 职场文书