`
mengdejun
  • 浏览: 408772 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

socket模拟post表单

    博客分类:
  • Php
阅读更多

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 socket 模拟POST 请求实例代码

    通常,PHP中实现POST请求我们会使用cURL扩展,但其实PHP原生提供的sockets也可以用来模拟POST请求。 首先,我们来理解一下HTTP POST请求的基本原理。HTTP POST请求是一种请求方法,用于向服务器提交数据。这种数据...

    C++模拟http post

    POST方法用于向服务器提交数据,通常用于表单提交或API调用。数据被包含在请求正文中,服务器接收到请求后会处理这些数据并返回响应。 在C++中实现HTTP POST功能,我们可以使用多种库,例如libcurl、poco库或者直接...

    易语言-易语言基于HPSocket,一键搭建 HTTP 服务,支持POST,GET(开源)

    POST方法常用于向服务器发送数据,比如表单提交。当用户填写表单并提交时,数据会被封装在HTTP请求中,通过POST方法发送给服务器。而GET方法则常用于获取资源,它的请求参数会显示在URL中,不适用于传递大量或敏感...

    使用Socket 完成HTTP post方式的文本及文件上传 demo

    下面我们将详细介绍如何使用Socket来模拟这个过程。 首先,我们需要创建一个Socket连接到服务器。这可以通过`java.net.Socket`类实现,提供服务器的IP地址和端口号作为参数。例如: ```java Socket socket = new ...

    vc模拟网页发送表单 51网站自动登录

    模拟POST请求,我们需要构造HTTP请求头和POST数据。请求头应包含请求方法(POST)、URL、Content-Type和Content-Length。例如: ```cpp std::string request = "POST /login.php HTTP/1.1\r\n"; request += "Host: ...

    基于SSL的操作网页POST自动化

    在网页POST自动化中,我们可以通过编程方式模拟用户填写表单并提交的行为,这在自动化测试、数据抓取或者批量操作中非常常见。在VC++环境中,可以使用Winsock库(也称为Windows Socket API)来实现SOCKET通信,进而...

    php模拟post提交数据的方法

    在上述代码示例中,通过socket模拟POST提交数据用于实现论坛登录。在发送POST数据后,代码会检查响应数据中是否包含设置cookie的信息,如果包含,则解析cookie并使用setcookie()函数在客户端设置cookie,这样就能够...

    socket httpclient

    2. POST方法:POST方法用于向服务器提交数据,常用于表单提交或上传文件。数据通常包含在请求体中。构造POST请求时,需要在请求头中指定Content-Type和Content-Length,然后将数据写入Socket连接。例如,"POST /form...

    php实现模拟post请求用法实例

    在PHP编程中,有时我们需要模拟HTTP的POST请求来与服务器进行交互,比如发送表单数据、执行API调用等。... 首先,我们来看第一种方法,...理解这些方法的工作原理和应用场景,可以帮助你在PHP中更高效地模拟POST请求。

    模拟GET/POST方法发送HTTP请求

    POST方法则用于向服务器提交数据,如表单填写内容,这些数据被包含在请求体中,不显示在URL上。 WinSock,全称为Windows Sockets,是Windows操作系统提供的API,用于实现TCP/IP协议栈的应用程序编程接口。使用...

    模拟tomcat、servlet服务器

    在模拟服务器中,Socket用于监听客户端的连接请求,并处理来自客户端的数据。通过ServerSocket类,我们可以创建一个监听特定端口的服务器,等待客户端的Socket连接。 2. **IO流**:在Java中,输入/输出流用于数据的...

    php socket http

    2. 处理请求:根据请求的不同类型(GET、POST等),执行相应的操作,如读取文件、处理表单数据等。 3. 构造HTTP响应:创建一个包含状态码、头部信息和响应体的HTTP响应,然后通过`socket_write()`发送给客户端。 4. ...

    最新版java模拟QQ登录空间

    在模拟QQ登录的过程中,Java的Socket编程或HttpURLConnection API会被用来发送HTTP请求到QQ的服务器,完成登录验证。了解HTTP协议的基本原理,如GET、POST请求,请求头和响应头的设置,是进行这项工作的基础。 其次...

    利用PHP fsockopen 模拟POST/GET传送数据的方法

    利用PHP的fsockopen函数可以模拟向其他网页或站点发送HTTP请求,具体来说,可以通过模拟POST和GET方法来传送数据。下面详细说明如何使用fsockopen函数来完成这一任务。 首先,要理解fsockopen函数是PHP中用于打开...

    PHP中的POST&GET的应用.docx

    在PHP中,可以通过fsockopen函数创建一个socket连接来模拟POST请求。在示例代码中,我们看到`$ps`数组用于存储POST参数,然后通过`urlencode`函数编码键值对,并将它们添加到`$posts`字符串中。最后,使用`fputs`将...

    php 抓取类 post 参数

    在这个场景中,`HttpClient`类用来模拟用户填写表单并提交数据的行为。 2. **urlencode**: - 在发送POST数据时,参数通常需要进行编码,以确保它们可以正确地在网络上传输。`urlencode`是PHP中的一个函数,用于对...

    HTTP Class for PHP , 支持 Curl 和 Socket

    - **网页抓取**:HTTP Class可以用来抓取网页内容,通过GET请求获取HTML,或者通过POST请求提交表单数据。 - **API交互**:在与RESTful API进行交互时,HTTP Class可以帮助构造和发送JSON或XML数据。 - **上传/...

    网略连接器 模拟发送网页数据

    4. **控件与组件**:`MSWINSCK.OCX`是一个ActiveX控件,它是Windows Socket (Winsock) 的一个组件,主要用于在网络应用程序中处理TCP/IP协议。在旧版的Windows系统中,开发者常使用ActiveX控件来集成网络功能,例如...

    php自动提交表单的方法(基于fsockopen与curl)

    使用fsockopen()发送POST请求的代码通常包括打开一个到目标URL的socket,发送请求头和请求体,然后读取服务器的响应。 在fsockopen()方法中,还需要注意字符编码的处理。由于HTTP协议基于ISO-8859-1编码,而PHP默认...

    基于c++的模拟爱奇艺web视频上传.zip

    资源包含文件:设计报告word+项目源码及exe可执行文件 此次学习的是HTTP的post协议,使用使用multipart form-data...简单实现了socket的复用。 详细介绍参考:https://blog.csdn.net/newlw/article/details/123017732

Global site tag (gtag.js) - Google Analytics