如何利用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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
yii2多图上传组件的使用教程
May 10 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实现求相对时间函数
2015/06/15 PHP
XML的代替者----JSON
2007/07/21 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
js 操作符汇总
2014/11/08 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
python输出数学符号实例
2020/05/11 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
企业环保标语
2014/06/10 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Python面向对象编程之类的概念
2021/11/01 Python
python manim实现排序算法动画示例
2022/08/14 Python