- 浏览: 408772 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wcjagta:
...
dedecms插件开发教程 -
xc2013:
看起来不错 先下载来试试
ECSHOP完全静态化解决方法 -
greemranqq:
你好,我在xp 上做实验,也是JS css带不过来,关于 ro ...
nginx资源定向 css js路径问题 -
hotsmile:
表结构给出来吧,测试的提示说要注册,
中国移动CMPP短信开发平台通讯包 2.8 -
mengdejun:
gang80306176 写道这个插件怎么用和安装普通插件一样 ...
phpcms2008 sp4单网页编辑器插件
post的本质就是发送给目的程序一个标志为post的协议串如下:
01 |
POST /目的程序 HTTP/1.1 |
02 |
Accept: */* |
03 |
Referer: http: //www.phpiask.com
|
04 |
Accept-Language: zh-cn,en-us;q=0.5 |
05 |
Content-Type: application/x-www-form-urlencoded |
06 |
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; .NET CLR 1.0.3705; .NET CLR 1.1.4322) |
07 |
Host: 要发送到的主机地址 |
08 |
Content-Length: 发送数据的长度 |
09 |
Pragma: no-cache |
10 |
Cache-Control: no-cache |
11 |
username=php&password=iask //post发送的数据 |
我想大家对form的post方法应该是最熟悉不过了,例如我们想吧用户名和密码发送给某个页面的时候,点击有两个文本域的表单的提交按钮,这个表单发送到action程序的就是以上数据。知道了这一点我想就不难了。
这时候我们只需要用php的socket打开一个端口,例如80端口,把以上信息利用这个端口发送给目的程序就行了。
我们如何在一个端口上建立一个socket信道呢?
在PHP中是如此简单呢!
fsockopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的接受变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
如果不出意外(你正确的设置fsockopen()函数的参数)的话,一个socket信道现在已经打开了,我们下一步需要做的就是,通过这个打开的信道把post请求协议发给目的程序,这时候可以使用fwrite或者fputs函数中的任意一个,把post的请求格式发给fsockopen()打开的句柄,这时候一个伟大的socket模拟的post请求就诞生了。顺便说一下啊:
你发送的时候可不能把我的post请求格式直接ctrl + V过去,你没看见里面的汉字等你自己去填写的吗?
以上是文字的描述,如果大家觉得说的非常垃圾,非常没有说服力的话,下边有一个现成的程序片段,大家可以看看。
1 |
$port = $url [ 'port' ] ? $url [ 'port' ] : 80;
|
2 |
$fp = fsockopen ( $url [ 'host' ], $port , $errno , $errstr ,10);
|
3 |
if (! $fp ) return "在主机: $url[host] $port 打开socket失败,失败原因是: $errno - $errstr" ;
|
4 |
fputs ( $fp , sprintf( "POST %s%s%s HTTP/1.0\r\n" , $url [ 'path' ], $url [ 'query' ] ? "?" : "" , $url [ 'query' ]));
|
5 |
fputs ( $fp , "Host:" . $url [ 'host' ]. "\r\n" );
|
6 |
fputs ( $fp , "Content-type: application/x-www-form-urlencoded\r\n" );
|
7 |
fputs ( $fp , "Content-length: " . strlen ( $encoded ) . "\r\n" );
|
8 |
fputs ( $fp , "Connection: close\r\n\r\n" );
|
9 |
fputs ( $fp , "$encoded\\n" ); |
对了还是顺便说一下吧,fgets($fp,1024);这个可以得到返回值的哦!!已经有不止一个人问过我咋接受返回了!!
package com.javaSocket; import java.io.IOException; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class TestClientHTTP { /** * @param args */ public static void main(String[] args) { try { Socket s = new Socket("192.168.0.102", 8080); try{ PrintStream ps = new PrintStream(s.getOutputStream()); ps.println("POST /studyProject/post/post1.jsp HTTP/1.1"); ps.println("Host: 192.168.0.102:8080"); ps.println("Content-Type: application/x-www-form-urlencoded"); //ps.println("Accept: */*"); /* ps.println("Accept-Language: zh-cn"); ps.println("Accept-Encoding: gzip, deflate"); ps.println("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); ps.println("Connection: Keep-Alive"); ps.println("Cache-Control: no-cache"); */ ps.println("Content-Length: 9");//Content-Length的值等于text1=456的长度,也就是POST数据的长度 ps.println(""); ps.println("text1=456"); Scanner in1 = new Scanner(s.getInputStream()); while(in1.hasNextLine()){ String input = in1.nextLine(); System.out.println(input); } }finally{ s.close(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
发表评论
-
php异步操作类库
2011-06-05 16:01 1834httpclient for php 的选择常用方案有以 ... -
织梦HTTP IMAGE下载类
2011-06-05 14:57 1879<?php if(!defined('DEDEINC ... -
php汉字转拼音
2011-06-05 14:41 1616<?php /**************** ... -
PHP采集利器:Snoopy 试用心得
2011-06-05 14:34 14079Snoopy是一个php类,用 ... -
php异步调用 提高用户体验
2011-05-30 14:22 1323这是我的一个技术很好的朋友写的,要我发表在我的博客上可让php ... -
PHP 异步调用 后台调用 持续执行 断开连接/浏览器
2011-05-26 10:31 1721标题很怪,因为我也 ... -
php socket模拟POST GET请求 fsockopen版
2011-05-26 10:14 7393function httpRequestGET($url){ ... -
php socket GET POST提交方法(HttpClient) 框架
2011-05-25 18:29 5562<?php /* Version 0.9, 6th ... -
mantis
2011-05-25 09:50 1297mantis 缺陷管理平台Mantis,也做Mantis ... -
Curl参数一览
2011-05-06 17:30 1487* 目录 1. 介绍 ... -
PHPRPC
2011-04-24 11:01 1331PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台 ... -
PHP身份证验证程序
2011-04-24 10:56 1275<?php // 计算身份证校验码,根据国家标准GB 116 ... -
nginx 502 Bad Gateway 错误问题收集
2011-04-23 09:43 1797502是FastCGI出现问题,所以从FastCGI配置入手。 ... -
深入理解PHP内存管理之谁动了我的内存
2011-04-12 21:57 851首先让我们看一个问题: ... -
OAUTH协议
2011-04-09 09:59 1123OAUTH协议为用户资源的 ... -
nginx/windows: 让nginx以服务的方式运行
2011-04-09 09:33 1159在windows下安装了nginx, 郁闷是发现它没有以服 ... -
ThinkPHP处理海量数据分表机制详细代码
2011-04-07 18:27 7230应用ThinkPHP内置的分表算法处理百万级用户数据. ... -
php 分库分表hash算法
2011-04-07 18:16 1704//分库分表算法 function calc_hash_d ... -
nginx配置文件实例: php (fastcgi), perl, proxy, rrd, nagios
2011-04-06 20:33 1842nginx.conf worker_processes 5; ... -
Nginx location 指令的使用(中文翻译)
2011-04-06 20:31 1179location syntax: location [=|~ ...
相关推荐
通常,PHP中实现POST请求我们会使用cURL扩展,但其实PHP原生提供的sockets也可以用来模拟POST请求。 首先,我们来理解一下HTTP POST请求的基本原理。HTTP POST请求是一种请求方法,用于向服务器提交数据。这种数据...
POST方法用于向服务器提交数据,通常用于表单提交或API调用。数据被包含在请求正文中,服务器接收到请求后会处理这些数据并返回响应。 在C++中实现HTTP POST功能,我们可以使用多种库,例如libcurl、poco库或者直接...
POST方法常用于向服务器发送数据,比如表单提交。当用户填写表单并提交时,数据会被封装在HTTP请求中,通过POST方法发送给服务器。而GET方法则常用于获取资源,它的请求参数会显示在URL中,不适用于传递大量或敏感...
下面我们将详细介绍如何使用Socket来模拟这个过程。 首先,我们需要创建一个Socket连接到服务器。这可以通过`java.net.Socket`类实现,提供服务器的IP地址和端口号作为参数。例如: ```java Socket socket = new ...
模拟POST请求,我们需要构造HTTP请求头和POST数据。请求头应包含请求方法(POST)、URL、Content-Type和Content-Length。例如: ```cpp std::string request = "POST /login.php HTTP/1.1\r\n"; request += "Host: ...
在网页POST自动化中,我们可以通过编程方式模拟用户填写表单并提交的行为,这在自动化测试、数据抓取或者批量操作中非常常见。在VC++环境中,可以使用Winsock库(也称为Windows Socket API)来实现SOCKET通信,进而...
在上述代码示例中,通过socket模拟POST提交数据用于实现论坛登录。在发送POST数据后,代码会检查响应数据中是否包含设置cookie的信息,如果包含,则解析cookie并使用setcookie()函数在客户端设置cookie,这样就能够...
2. POST方法:POST方法用于向服务器提交数据,常用于表单提交或上传文件。数据通常包含在请求体中。构造POST请求时,需要在请求头中指定Content-Type和Content-Length,然后将数据写入Socket连接。例如,"POST /form...
在PHP编程中,有时我们需要模拟HTTP的POST请求来与服务器进行交互,比如发送表单数据、执行API调用等。... 首先,我们来看第一种方法,...理解这些方法的工作原理和应用场景,可以帮助你在PHP中更高效地模拟POST请求。
POST方法则用于向服务器提交数据,如表单填写内容,这些数据被包含在请求体中,不显示在URL上。 WinSock,全称为Windows Sockets,是Windows操作系统提供的API,用于实现TCP/IP协议栈的应用程序编程接口。使用...
在模拟服务器中,Socket用于监听客户端的连接请求,并处理来自客户端的数据。通过ServerSocket类,我们可以创建一个监听特定端口的服务器,等待客户端的Socket连接。 2. **IO流**:在Java中,输入/输出流用于数据的...
2. 处理请求:根据请求的不同类型(GET、POST等),执行相应的操作,如读取文件、处理表单数据等。 3. 构造HTTP响应:创建一个包含状态码、头部信息和响应体的HTTP响应,然后通过`socket_write()`发送给客户端。 4. ...
在模拟QQ登录的过程中,Java的Socket编程或HttpURLConnection API会被用来发送HTTP请求到QQ的服务器,完成登录验证。了解HTTP协议的基本原理,如GET、POST请求,请求头和响应头的设置,是进行这项工作的基础。 其次...
利用PHP的fsockopen函数可以模拟向其他网页或站点发送HTTP请求,具体来说,可以通过模拟POST和GET方法来传送数据。下面详细说明如何使用fsockopen函数来完成这一任务。 首先,要理解fsockopen函数是PHP中用于打开...
在PHP中,可以通过fsockopen函数创建一个socket连接来模拟POST请求。在示例代码中,我们看到`$ps`数组用于存储POST参数,然后通过`urlencode`函数编码键值对,并将它们添加到`$posts`字符串中。最后,使用`fputs`将...
在这个场景中,`HttpClient`类用来模拟用户填写表单并提交数据的行为。 2. **urlencode**: - 在发送POST数据时,参数通常需要进行编码,以确保它们可以正确地在网络上传输。`urlencode`是PHP中的一个函数,用于对...
- **网页抓取**:HTTP Class可以用来抓取网页内容,通过GET请求获取HTML,或者通过POST请求提交表单数据。 - **API交互**:在与RESTful API进行交互时,HTTP Class可以帮助构造和发送JSON或XML数据。 - **上传/...
4. **控件与组件**:`MSWINSCK.OCX`是一个ActiveX控件,它是Windows Socket (Winsock) 的一个组件,主要用于在网络应用程序中处理TCP/IP协议。在旧版的Windows系统中,开发者常使用ActiveX控件来集成网络功能,例如...
使用fsockopen()发送POST请求的代码通常包括打开一个到目标URL的socket,发送请求头和请求体,然后读取服务器的响应。 在fsockopen()方法中,还需要注意字符编码的处理。由于HTTP协议基于ISO-8859-1编码,而PHP默认...
资源包含文件:设计报告word+项目源码及exe可执行文件 此次学习的是HTTP的post协议,使用使用multipart form-data...简单实现了socket的复用。 详细介绍参考:https://blog.csdn.net/newlw/article/details/123017732