如何利用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 相关文章推荐
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
php 文件上传实例代码
Apr 19 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
PHP设置进度条的方法
Jul 08 PHP
php实现简单的MVC框架实例
Sep 23 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
一个简单至极的PHP缓存类代码
2015/10/23 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
JS中的三个循环小结
2017/06/20 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python3简单实现串口通信的方法
2019/06/12 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
品质主管的岗位职责
2013/12/04 职场文书
实习评语
2013/12/16 职场文书
生产厂厂长岗位职责
2013/12/25 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技