利用 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),特别是在跨语言跨平台的编程过程中.事实上实现方 ...
随机推荐
- raid5 / raid5e / raid5ee的性能对比及其数据恢复原理
RAID 5 是一种存储性能.数据安全和存储成本兼顾的存储解决方案. RAID 5可以理解为是RAID 0和RAID 1的折中方案.RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低 ...
- 02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...
- MMA8451重力加速度计通过写内部校准寄存器进行校准
|版权声明:本文为博主原创文章,未经博主允许不得转载. AN4069应用笔记中提到MMA8451的三个轴重力校准有两种方法, 第一种方法是简易校准,将贴有MMA8451的设备整体,Z轴正面朝上放在校准 ...
- Angular开发实践(八): 使用ng-content进行组件内容投射
在Angular中,组件属于特殊的指令,它的特殊之处在于它有自己的模板(html)和样式(css).因此使用组件可以使我们的代码具有强解耦.可复用.易扩展等特性.通常的组件定义如下: demo.com ...
- 第一次PTA作业
题目6-1拆分实数整数及小数部分 1设计思路 (1) 第一步:阅读题目要求及所给部分. 第二步:根据题意补全相应函数. (2)流程图 无 2.实验代码 #include <stdio.h> ...
- ASP.NET Web API编程——路由
路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生 ...
- Python-Cpython解释器支持的进程与线程-Day9
Cpython解释器支持的进程与线程 阅读目录 一 python并发编程之多进程 1.1 multiprocessing模块介绍 1.2 Process类的介绍 1.3 Process类的使用 1.4 ...
- 新概念英语(1-69)The car race
新概念英语(1-69)The car race Which car was the winner in 1995 ? There is car race near our town every ye ...
- Flow简易教程——安装篇
.mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...
- 基于UDP协议的控制台聊天程序(c++版)
本博客由Rcchio原创,转载请告知作者 ------------------------------------------------------------------------------- ...