PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息

了解完了HTTP头信息和URL信息的具体内容,我们开始尝试自己动手写一段头信息发送到服务器。Windows内置命令Telnet可以帮助我们发送简单的HTTP请求。

并且TELNET是一个特别灵活的工具,我们还可以用它进行FTP/SMTP/POP3/TCP等方式的简单请求。

通过开始菜单--运行--CMD命令进入DOS状态,

我们输入“Telnet 主机地址 端口(Telnet 192.168.1.99 80)” 来进入telnet命令状态(完全黑窗口,此时输出字符会出问题),我们按”ctrl”+”]”,切回普通CMD窗口,再按”ENTER”回车键进入编辑命令状态。

如果系统提示找不到TELNET命令,只需按如下方式可解锁TELNET命令。

进入TELNET 命令输入模式后我们就可以直接编辑头文件来进行发送了

只需要注意:当编辑完请求头文件后要按两次回车键来发送。

这是一次标准的HTTP请求与响应,是不是跟上节的HTTP文件关联了。

当然我们不能只用这么不方便的工具,下面要介绍的是PHP里的fsockopen()方法。

先来看fsockopen()方法的原型:

resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

它返回一个资源类型的结果,需要传入的参数分别是:

$hostname:主机名

$port:端口号

$errno:错误号(注意原型中的"&"一旦连接有错误,错误号将会被赋值给$errno)

$errstr:错误字符串(一旦连接有错误,错误信息将会被赋值给$errstr)

$timeout:超时时间

$host=parse_url($url,PHP_URL_HOST);//获取host数据

$port=parse_url($url,PHP_URL_PORT)==null ? 80 : parse_url($url,PHP_URL_PORT);//获取端口数据,如果没有设置则默认为80

$path=parse_url($url,PHP_URL_PATH);//获取到path信息后面使用

$socket=fsockopen($host,$port,$errno,$errstr,20);//获取资源类型$socket

这个资源类型就如同Telnet里我们用telnet 主机名 端口号 命令之后的环境。

那么接下来,我们就要往这个环境里写内容了。

我们可以分次用fwrite()方法写入头信息,也可以将头信息进行拼合一次写入。

fwrite($socket, "POST ".$path." HTTP/1.1\r\n");    

fwrite($socket, "HOST: localhost\r\n\r\n");

或先拼合再写入的方式:

$str="POST ".$path." HTTP/1.1\r\n"."HOST: localhost\r\n\r\n";

fwrite($socket,$str);

注意:请求行、报头之间有一次回车键,我们用"\r\n"来进行回车输入,结束输入时两用"\r\n\r\n"模拟两次回车。

接下来我们用fread来读取响应信息并将其存入$info中:

while (!feof($socket)) {          //当还有待读取内容

    $info.= fgets($socket, 4096);  //每次读取4096个字节内容,并用.连接符连接到$info中。
}
echo $info;//输出返回结果。

当然以上是一个特别简单的例子,我们可以通过拼合更多的报头信息(加入Accept等)来将它更加完善。

接下来我们会说一些常用的POST方式。

如果您觉得本文对您有帮助,请您动手点一下推荐,如果有什么问题,可以在下方留言共同讨论,谢谢。

时间: 2024-11-04 14:49:15

PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息的相关文章

[PHP学习教程 - 网络]004.模拟发送HTTP请求[GET/POST](HTTP Simulator)

引言:经常在开发期间,客户端与服务端的调试都是借助于真实的容器返回.尤其是在处理到POST时,通常刚刚入门的兄弟姐妹就一定要借助容器.今天,我们就来处理一下模拟HTTP. 本文列举了常见的四种请求方式: 函数版本[file_get_contents] 函数版本[Socket] 函数版本[Curl] 函数版本[Curl2] 大家直接观看代码吧. 函数版本[file_get_contents] 基本信息: string send_post ( string $url, string $data ).

用java模拟发送post请求

package com.bytestream.practice.demo;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;

使用telnet发送HTTP请求

使用telnet发送HTTP请求 写这篇博客,其实没有太大的实际意义,但是还是很有必要的,如果用好Telnet指令,就可以很好的理解HTTP的一些概念,特别是http1.1的持续链接. 要想使用Telnet命令,必须首先打开Telnet客户端和服务器,在控制面板里面添加呢,然后用services.msc可以检查是否安装好了. 例如:telnet localhost 8080,然后就可以看到返回的相应. 如果我们使用http1.1的话,就是持续链接,也就是可以连续的在同一个链接上发送请求. HEA

PHP模拟发送POST请求之一、HTTP协议头部解析

WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其基于URL的直观,易被我们了解,可POST请求因其信息的隐蔽,在安全的同时,也给开发者们模拟发送带来了麻烦.接下来的几篇博文中,我将结合自己的笔记和理解,详细解释PHP进行POST请求的几种方法,如有错误,烦请指正. HTTP协议信息是WEB开发中的一项重要内容,了解它可以帮助我们更深刻地理解BS交互,也有利于我们从更底层理解WEB开发.HTTP协议是一种简单灵活方便的通讯协议,并且要记住,它是一种无状态的协议,即它是一种无记

PHP模拟发送POST请求之五curl基本使用和多线程优化

今天来介绍PHP模拟发送POST请求的重型武器——cURL函数库的使用和其多线程的优化方法. 说起cURL函数,可谓是老生常谈,但网上许多资料都在关键部分语焉不详,列出一大堆手册上的东西,搞得我入门时也万分痛苦,我翻了些资料,结合自己的笔记,总结了这篇博文,希望能给初次接触cURL的开发者提供一些帮助. cURL的基本使用步骤 首先来介绍cURL: cURL按照HTTP头信息来模拟浏览器传输数据,它支持FTP, FTPS, HTTP, HTTPS, DICT, FILE等协议,拥有HTTPS认证

使用C#发送Http 请求实现模拟登陆(以博客园为例)

原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也是这样模拟客户端的cookie 然后发送请求去抢票,然后12306 本文将演示如何用C# 来实现模拟登陆的,推荐一款工具Fiddler,这是一款监听http 请求的利器.废话不多说,我就以博客园为例来实现模拟登陆.首先我登陆博客园 http://passport.cnblogs.com/login.

jmeter测试TCP服务器/模拟发送TCP请求

jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应. jmeter模拟发送TCP请求的方法: 1.新建线程组,然后在线程组中新建TCP采样器 TCP采样器中填写服务器地址.端口和"要发送的文本",其它选项根据需要选填: re_use connection表示重复发送连接请求 close connection 关闭连接 如果TCP请求需要用户名/密码,可以在登录配置中填写 2.新建&qu

fiddler模拟发送post请求

模拟发送post请求:把原接口请求的textview内容复制,粘贴到body中去 需要以表单形式发送数据时,要添加请求头content-type 原文地址:https://www.cnblogs.com/come202011/p/12262452.html

夺命雷公狗jquery---55---Ajax的高级实现,模拟发送get请求

jQuery.get(url,[data],[callback]) 或 $.get jQuery.post(url,[data],[callback]) 或 $.post 参数说明: url:请求的url页面 [data]:发送Ajax时传递的参数,要求格式为json对象,如果没有可以不写,直接写第三个参数即可 [callback]:当Ajax状态码为4且响应状态码为200时所触发的回调函数 <!DOCTYPE html> <html> <head> <meta