如何利用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&amp;&amp;mysql)四
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php 归并排序 数组交集
May 10 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
php图片的二进制转换实现方法
Dec 15 PHP
浅谈php命令行用法
Feb 04 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
php png失真的原因及解决办法
Nov 17 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中header函数的用法及其注意事项详解
2016/06/13 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
python格式化字符串实例总结
2014/09/28 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python制作一个桌面便签软件
2015/08/09 Python
Python制作爬虫采集小说
2015/10/25 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
J2EE面试题大全
2016/08/06 面试题
中学家长会邀请函
2014/02/03 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
服装设计师求职信
2014/06/04 职场文书
幼儿园课题方案
2014/06/09 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
银行业务授权委托书
2014/10/10 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python