本质上实现组装http信息的请求行,头信息。主题信息。參考it自学网

cookie信息和http请求头有非常大关系,注意把http请求头信息传递到函数里面

01-msg.php

<?php

require('./http.class.php');

$http = new Http('http://home.verycd.com/cp.php?

ac=pm&op=send&touid=0&pmid=0');

$http->setHeader('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
$http->setHeader('Accept-Encoding: gzip, deflate');
$http->setHeader('Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3');
$http->setHeader('Connection: keep-alive'); $http->setHeader('Cookie: Hm_lvt_c7849bb40e146a37d411700cb7696e46=1371132935,1371551596,1371552570; CNZZDATA1479=cnzz_eid%3D2070887527-1371133011-http%253A%252F%252Fhome.verycd.com%26ntime%3D1371559611%26cnzz_a%3D27%26retime%3D1371559611556%26sin%3Dhttp%253A%252F%252Fwww.verycd.com%252Fi%252F17907141%252F%26ltime%3D1371559611556%26rtime%3D1; __utma=248211998.1671623420.1371133015.1371557486.1371559612.4; __utmz=248211998.1371552579.2.2.utmcsr=verycd.com|utmccn=(referral)|utmcmd=referral|utmcct=/; Hm_lpvt_c7849bb40e146a37d411700cb7696e46=1371554752; post_action=repost; BAIDU_CLB_REFER=http%3A%2F%2Fcwebmail.mail.163.com%2Fjs5%2Fread%2Freadhtml.jsp%3Fssid%3DI7zQECYCxLDKHPlnXYxQm9sNe5EPh1drYPvN26nZekk%253d%26mid%3D45%3A1tbiLRFAhFEFoLvtCAAAsS%26color%3D003399%26preventSetRead%3Don%26font%3D15; uchome_loginuser=http%E5%8D%8F%E8%AE%AE; uchome__refer=%2Fspace.php%3Fdo%3Dpm%26filter%3Dnewpm; __utmc=248211998; sid=9a48b201fb4d176a7188ef2a3560789651eb4766; member_id=17822047; member_name=http%E5%8D%8F%E8%AE%AE; mgroupId=93; pass_hash=e75f942862a5e927a2faffd2d2d582c9; rememberme=false; uchome_auth=4128oUJWyonkCXZvxM4sDRjcugSmt3L0r197Pq%2BPdf8fcLJsUiNZKBXjG0hYuPZSRK3XEs2FuRn1pH2cEFBNc1H0Im7x5A; uchome_sendmail=1; uchome_checkpm=1; __utmb=248211998.1.10.1371559612; dcm=1'); $http->setHeader('Referer: http://home.verycd.com/cp.php?ac=pm');
$http->setHeader('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'); $msg = array(
'formhash'=>'4f23e777',
'message'=>'我不是在灌水,请放行',
'pmsubmit'=>'true',
'pmsubmit_btn'=>'发送',
'refer'=>'http://home.verycd.com/space.php?do=pm&filter=privatepm',
'username'=>'http接收'
); file_put_contents('./res.html',$http->post($msg));
echo 'ok';

http.class.php

<?php
/*
PHP+socket编程 发送HTTP请求 要求能 模拟下载。注冊。登陆,批量发帖
*/ // http请求类的接口
interface Proto {
// 连接url
function conn($url); //发送get查询
function get(); // 发送post查询
function post(); // 关闭连接
function close();
} class Http implements Proto { const CRLF = "\r\n"; protected $errno = -1;
protected $errstr = '';
protected $response = ''; protected $url = null;
protected $version = 'HTTP/1.1';
protected $fh = null; protected $line = array();
protected $header = array();
protected $body = array(); public function __construct($url) {
$this->conn($url);
$this->setHeader('Host: ' . $this->url['host']);
} // 此方法负责写请求行
protected function setLine($method) {
$this->line[0] = $method . ' ' . $this->url['path'] . '? ' .$this->url['query'] . ' '. $this->version;
} // 此方法负责写头信息
public function setHeader($headerline) {
$this->header[] = $headerline;
} // 此方法负责写主体信息
protected function setBody($body) {
$this->body[] = http_build_query($body);
} // 连接url
public function conn($url) {
$this->url = parse_url($url);
// 推断端口
if(!isset($this->url['port'])) {
$this->url['port'] = 80;
} // 推断query
if(!isset($this->url['query'])) {
$this->url['query'] = '';
} $this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3);
} //构造get请求的数据
public function get() {
$this->setLine('GET');
$this->request();
return $this->response;
} // 构造post查询的数据
public function post($body = array()) {
$this->setLine('POST'); // 设计content-type
$this->setHeader('Content-type: application/x-www-form-urlencoded'); // 设计主体信息,比GET不一样的地方
$this->setBody($body); // 计算content-length
$this->setHeader('Content-length: ' . strlen($this->body[0])); $this->request(); return $this->response;
} // 真正请求
public function request() {
// 把请求行。头信息。实体信息 放在一个数组里,便于拼接
$req = array_merge($this->line,$this->header,array(''),$this->body,array(''));
//print_r($req); $req = implode(self::CRLF,$req);
//echo $req; exit; fwrite($this->fh,$req); while(!feof($this->fh)) {
$this->response .= fread($this->fh,1024);
} $this->close(); // 关闭连接
} // 关闭连接
public function close() {
fclose($this->fh);
} } /*
$url = 'http://news.163.com/13/0613/09/9187CJ4C00014JB6.html'; $http = new Http($url);
echo $http->get();
*/
/*
set_time_limit(0); $url = 'http://liangyue.net.cn/0523/?'; for($i=1;$i<100;$i++) {
$str = str_shuffle('abcdefghijklmnopqrst0776656');
$tit = substr($str,0,5);
$con = substr($str,6,8); $http = new Http($url);
$http->post(array('tit'=>$tit,'con'=>$con,'submit'=>'留言')); echo $tit,'-----------',$con,'<br />'; usleep(2000);
} */

最新文章

  1. cookie
  2. Sphinx 之 Coreseek、Sphinx-for-chinaese、Sphinx+Scws 评测
  3. angular 国际化
  4. 关于Redis中交互的过程
  5. ViewModel在MVC3中的应用:一个view显示多个model
  6. Ubuntu实现双网卡双IP双待机
  7. 一步一步的理解C++STL迭代器
  8. iOS 界面开发
  9. php+openresty 部署安装
  10. textarea高度自适应,随着内容增加高度增加
  11. machine learning 之 Anomaly detection
  12. C# 异步(上)
  13. 一次线上问题引发的对于C#中相等判断的思考
  14. 实验三:xen环境下的第一个虚拟机的安装
  15. Codeforces Round #510 (Div. 2)(B)
  16. 使用 kafkat 在线扩缩容 kafka replicas
  17. python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象
  18. selenium+python 移动鼠标方法
  19. 【LeetCode】68. Text Justification
  20. 20145310《Java程序设计》第4次实验报告

热门文章

  1. 第3节 mapreduce高级:2、3、课程大纲&amp;共同好友求取步骤一、二
  2. vue列表排序实现中的this问题
  3. 零基础入门学习Python(5)--闲聊之Python的数据类型
  4. eclipse perl配置
  5. xtu read problem training 4 A - Moving Tables
  6. uva1366/LA3530
  7. java springMVC 极致验证 非demo版
  8. 整体二分--BZOJ1901: Zju2112 Dynamic Rankings
  9. Tyvj 1176 火焰巨魔的惆怅
  10. Delphi DBGrid实现多选