利用 socket 发送 get/post 请求
思路:利用 fsockopen 函数与要请求的主机建立一个通信通道,再将请求行、头信息、主体信息通过这个通道传输给主机实现请求的发送。利用这种方式发送 get 请求就是常说的小偷程序,发送 post 请求则可以在论坛、博客发帖。
代码:
<?php
/*利用HTTP协议socket发送get请求(小偷程序)、post请求(批量发帖程序)
* 知识点:fsockopen、parse_url
*/
//请求类的接口
header('content-type:text/html;charset=utf-8');
interface Proto{
function request($url);
function get();//
function post($str);
function close();//关闭连接
} class Http implements Proto{ protected $url = array();
protected $header = null;
protected $method = null;
protected $port = null;
protected $response = null;
protected $errno = -1;
protected $errstr = null;
protected $str = null;
public function _construct($url){ } public function setheader(){
$this->header = $this->method.' '.$this->url['path'].' HTTP/1.1';//记录请求行
$this->header .= "\r\nHost: ".$this->url['host'];//记录头信息
$this->header .= "\r\nReferer: ".$this->url['host'];//伪造referer信息
if($this->method=='GET'){
$this->header .= "\r\n\r\n";
}
if($this->method=='POST'){//记录主体信息
$this->header .="\r\nContent-type: application/x-www-form-urlencoded";
$this->header .="\r\nContent-length: ".strlen($this->str);
$this->header .="\r\n\r\n" . $this->str;
}
} public function request($url){
$this->url = parse_url($url);
if(!isset($this->url['port'])){
$this->url['port'] = 80;
}
//打开连接主机的通道
$this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3);
$this->setheader();
fwrite($this->fh,$this->header);//将请求行、头信息、主体信息通过通道传给主机
while(!feof($this->fh)){
$this->response .= fread($this->fh,10240);
}
$this->close();
return $this->response;
} function get(){
$this->method = "GET";
}
function post($str){
$this->method = "POST";
$this->str = $str;
}
function close(){
fclose($this->fh);
}
}
/*发送get请求
$url='http://mobile.163.com/16/0518/07/BNB519NG0011179O.html#index_digi_1';
$ht = new Http();
$ht->get();
echo $ht->request($url);
*/ /*发送post请求*/
$url='http://localhost:81/web/message/index.php';
$str='user=老李&title=测试HTTP&content=这是个测试&submit=提 交';
$ht = new Http();
$ht->post($str);
echo $ht->request($url); /*盗链图片
$url='http://........png';
$ht = new Http();
$ht->get();
$p = substr(strstr($ht->request($url),"\r\n\r\n"),4);
file_put_contents('./aa.png',$p);
*/
?>
如果发送请求的页面需要登录,只需在头信息中增加 “cookie: .....” 就可以了,cookie后面的信息可以通过抓包查看。
利用 socket 发送 get/post 请求的更多相关文章
- php 利用socket发送GET,POST请求
		作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http ... 
- 网络编程(一) 利用NSURLSession发送GET POST请求
		Xcode 7.0后,http链接不能直接访问(https可以),需要在Info.plist增加下面一项才能正确访问. 使用NSURLSession进行网络请求的流程: 1.构造NSURL 2.构造N ... 
- c++如何使用SOCKET 发送HTTP1.1 GET POST请求包
		如何使用SOCKET 发送HTTP1.1 GET POST请求包 分类: 无线通信 C/C++2009-10-29 10:58 14259人阅读 评论(15) 收藏 举报 socket服务器actio ... 
- android firmware 利用UDP socket发送Magic Packet--python版本
		android firmware 利用UDP socket发送Magic Packet--python版本 #!/usr/bin/python import sys, time from struct ... 
- android firmware 利用UDP socket发送Magic Packet--c语言版本
		android firmware 利用UDP socket发送Magic Packet 1 Magic Packet格式: 6个0xFF + 16个Dst Mac Address 2 代码需要设置目的 ... 
- 利用postman进行接口测试并发送带cookie请求的方法
		做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ... 
- socket发送请求,协程
		1.socket发送请求 #发送请求的方式 #方式一 import requests ret = requests.get("https://www.baidu.com/s?wd=abc&q ... 
- C#用SOCKET发送HTTP请求小例
		private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ... 
- 利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)
		在非常多企业级应用中,我们都没法直接通过开发语言sdk包封装的http工具来模拟http复合表单(multipart/form-data),特别是在跨语言跨平台的编程过程中.事实上实现方 ... 
随机推荐
- 《javascript设计模式与开发实践》阅读笔记(14)—— 中介者模式
			中介者模式 数个对象之间的通信全部委托一个中介者完成.适用于对象之间互相引用,关系错综复杂的情况. 什么情况下需要使用中介者模式 对象较多,且对象间会相互引用,当一个对象的某个状态改变时,得通知其他对 ... 
- HTTP协议扫盲(四)HTTP协议进阶 - MIME类型
			一.概念和原理 1.什么是MIME类型? MIME类型,即多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器. 服务器会将它们发送的多媒体数据的类型告诉 ... 
- SSO的全方位解决方案 - Kerberos协议(RFC 1510)
			一.桌面SSO和WEB-SSO的局限性 前面我们的解决方案(桌面SSO和WEB-SSO)都有一个共性:要想将一个应用集成到我们的SSO解决方案中,或多或少的需要修改应用程序. Web应用需要配置一个我 ... 
- 新概念英语(1-9)How is Ema?
			A:Hello Helen. B:Hi Steven. A:How are you today? B:I'm very well, thank you. And you? A:I'm fine tha ... 
- ibatis的优缺点及可行性分析
			1.优点 简单: 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现. 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我 ... 
- Docker学习(1)安装
			1. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ... 
- python如何转换word格式、读取word内容、转成html
			# python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ... 
- Java基础小记
			一.数据类型转换 1.引用数据类型 包装类型:Byte.Short.Long.Integer.Character.Float.Double.Boolean 2.基本类型与包装类转换 Java里有8种包 ... 
- 【SQL.基础构建-第一节(1/4)】
			-- Tips:数据库与sql-- 一.What's 数据库-- 1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.-- ... 
- springboot快速入门
			SpringBoot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再 ... 
