思路:利用 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 请求的更多相关文章

  1. php 利用socket发送GET,POST请求

    作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http ...

  2. 网络编程(一) 利用NSURLSession发送GET POST请求

    Xcode 7.0后,http链接不能直接访问(https可以),需要在Info.plist增加下面一项才能正确访问. 使用NSURLSession进行网络请求的流程: 1.构造NSURL 2.构造N ...

  3. c++如何使用SOCKET 发送HTTP1.1 GET POST请求包

    如何使用SOCKET 发送HTTP1.1 GET POST请求包 分类: 无线通信 C/C++2009-10-29 10:58 14259人阅读 评论(15) 收藏 举报 socket服务器actio ...

  4. android firmware 利用UDP socket发送Magic Packet--python版本

    android firmware 利用UDP socket发送Magic Packet--python版本 #!/usr/bin/python import sys, time from struct ...

  5. android firmware 利用UDP socket发送Magic Packet--c语言版本

    android firmware 利用UDP socket发送Magic Packet 1 Magic Packet格式: 6个0xFF + 16个Dst Mac Address 2 代码需要设置目的 ...

  6. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  7. socket发送请求,协程

    1.socket发送请求 #发送请求的方式 #方式一 import requests ret = requests.get("https://www.baidu.com/s?wd=abc&q ...

  8. C#用SOCKET发送HTTP请求小例

    private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ...

  9. 利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)

           在非常多企业级应用中,我们都没法直接通过开发语言sdk包封装的http工具来模拟http复合表单(multipart/form-data),特别是在跨语言跨平台的编程过程中.事实上实现方 ...

随机推荐

  1. 《javascript设计模式与开发实践》阅读笔记(14)—— 中介者模式

    中介者模式 数个对象之间的通信全部委托一个中介者完成.适用于对象之间互相引用,关系错综复杂的情况. 什么情况下需要使用中介者模式 对象较多,且对象间会相互引用,当一个对象的某个状态改变时,得通知其他对 ...

  2. HTTP协议扫盲(四)HTTP协议进阶 - MIME类型

    一.概念和原理 1.什么是MIME类型? MIME类型,即多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器. 服务器会将它们发送的多媒体数据的类型告诉 ...

  3. SSO的全方位解决方案 - Kerberos协议(RFC 1510)

    一.桌面SSO和WEB-SSO的局限性 前面我们的解决方案(桌面SSO和WEB-SSO)都有一个共性:要想将一个应用集成到我们的SSO解决方案中,或多或少的需要修改应用程序. Web应用需要配置一个我 ...

  4. 新概念英语(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 ...

  5. ibatis的优缺点及可行性分析

    1.优点 简单: 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现. 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我 ...

  6. Docker学习(1)安装

    1. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  7. python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

  8. Java基础小记

    一.数据类型转换 1.引用数据类型 包装类型:Byte.Short.Long.Integer.Character.Float.Double.Boolean 2.基本类型与包装类转换 Java里有8种包 ...

  9. 【SQL.基础构建-第一节(1/4)】

    --        Tips:数据库与sql--    一.What's 数据库-- 1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.--   ...

  10. springboot快速入门

    SpringBoot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再 ...