`
liangjian103
  • 浏览: 177534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用JAVA模拟POST发送数据

阅读更多

服务器:
1.jsp
<body>
<form name="_ctl0" method="post" action="TestFileManager.aspx" id="_ctl0" enctype="multipart/form-data">
<input type="hidden" name="__VIEWSTATE" value="dDwyNTIzNjA5NDU7Oz7rsE3eBYzQHDVtl+aTn96MvQW6PQ==" />
<p>
<input name="uploadfile1" id="uploadfile1" type="file" size="49" />
<input type="submit" name="Button1" value="?" id="Button1" />
</p>
<p>
<span id="Label1" style="width:459px;"></span>
</p>
<!-- Insert content here -->
</form>
</body>
客户端:
首先创建一个到服务器http的请求
HttpRequest request = new HttpRequest("http://服务器/1.jsp");
第一次使用的是GET方式
request.setMethod("GET");
紧接着进行一些请求的属性设置
request.setRequestHeader("Cache-Control", "no-cache");
这里保持连接,因为后面还要发送数据到服务器呢
request.setRequestHeader("Connection", "Keep-Alive");
下面是一些无关紧要的属性设置了。
request.setRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
request.setRequestHeader("Accept-Encoding", "gzip, deflate");
request.setRequestHeader("Accept-Language", "en-au");
request.setRequestHeader("Referer", "http://服务器/1.jsp");
request.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3215; .NET CLR 1.0.3705)");
构造好了连接请求,然后连接
request.connect();
紧接着提取Cookie值,在后文的post中可以用到。
String strCookie = request.getResponseHeader("Set-Cookie");
strCookie = strCookie.substring(0,strCookie.indexOf(";"));
下面通过循环查找,提取__VIEWSTATE的值
for ( int i = 0; i < nlist.getLength(); i++) {
node = nlist.item(i);
strName = getNodeAttributeValue(node,"name");
if ( strName.equals("__VIEWSTATE") ) {
strValue = getNodeAttributeValue(node,"value");
break;
}
}
往服务器组织发送数据
DataOutputStream dos = new DataOutputStream(request.getOutputStream());
dos.writeBytes("-----------------------------"+strBoundary);//这是每个要被发送数据间的间隔
dos.writeBytes(" Content-Disposition: form-data; name="__VIEWSTATE"");
dos.writeBytes(" "+strValue);
dos.writeBytes(" -----------------------------"+strBoundary);
这里面是发送文件的部分
dos.writeBytes(" Content-Disposition: form-data; name="uploadfile1"; filename="" + strFileName + """);
dos.writeBytes(" Content-Type: text/xml");
dos.writeBytes(" ");
dos.writeBytes(new String(data));
dos.writeBytes(" -----------------------------"+strBoundary);
dos.writeBytes(" Content-Disposition: form-data; name="Button1"");
dos.writeBytes(" 上传");
dos.writeBytes(" -----------------------------"+strBoundary+"--");
dos.writeBytes(" ");
dos.close();

 

HttpClient 用post方法提交数据 源代码:

package post;

import java.io.IOException;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

public class PostHttp {

/**
* @param args
*/
public static void main(String[] args) {
   // TODO Auto-generated method stub
   HttpClient httpClient = new HttpClient();
   String url = "http://193.167.13.21/setup.cgi";
   PostMethod postMethod = new PostMethod(url);
//   填入各个表单域的值
   NameValuePair[] data = {
     new NameValuePair("ID", "11"),
     new NameValuePair("mtg", "0"),
     new NameValuePair("haveCookie", "0"),
     new NameValuePair("backID", "30"),
     new NameValuePair("psw", "password")
   };
//   将表单的值放入postMethod中
   postMethod.setRequestBody(data);
//   执行postMethod
   int statusCode = 0;
   try {
    statusCode = httpClient.executeMethod(postMethod);
   } catch (HttpException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
//   HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发
//   301或者302
   if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
   {
    //   从头中取出转向的地址
    Header locationHeader = postMethod.getResponseHeader("location");
    String location = null;
    if (locationHeader != null) {
     location = locationHeader.getValue();
     System.out.println("The page was redirected to:" + location);
    }
    else {
     System.err.println("Location field value is null.");
    }
    return;
   }
   else
   {
         System.out.println(postMethod.getStatusLine());
         String str = "";
         try {
               str = postMethod.getResponseBodyAsString();
         } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
         }        
         System.out.println(str);
   }
   postMethod.releaseConnection();
        return ;
}

}
//这是一个用户认证过程的登陆信息

其中需要的jar包:

1、 commons-httpclient-3.1-rc1.zip http://jakarta.apache.org/commons/httpclient/downloads.html

2、commons-codec-1.3.jar    http://jakarta.apache.org/site/downloads/downloads_commons-codec.cgi

3、commons-logging-api.jar   在tomcat5.5中的Tomcat 5.5\bin目录下或者    http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi

方法3:

1.用HttpURLConnection 类
2.用connect建连接
3.用setRequestMethod 方法设置request方法(post,get..)
4.用getResponseMessage 方法取内容
我没有试过,具体请看apiTop

2 楼kiddycoffee(debug 中。。。) 回复于 2001-08-22 11:56:26 得分 0

不用模拟,这个类本来就提供了这样的接口的。
如上所述。(不过我也没用过。:) )Top

3 楼kiddycoffee(debug 中。。。) 回复于 2001-08-22 11:57:43 得分 0

错了,我只在 J2ME 的手机里面用过这个类 post 过数据(不过已经是经过改装过的了)。Top

4 楼llkh(不要不把村长当干部) 回复于 2001-08-22 12:39:51 得分 0

参见本版关于servlet与applet的通信过程Top

5 楼bobokong(轨迹球) 回复于 2001-08-22 12:52:02 得分 0

gzTop

6 楼zgcclg() 回复于 2001-08-22 18:35:10 得分 0

有用过的吗?请给出例子。
其实get方法我已经实现,以下代码能够出来结果?请给出正确的Post到一个表单的方法。

URL destURL = new URL("http://192.168.68.234:8100/form_test.jsp");
HttpURLConnection urlConn= (HttpURLConnection)destURL.openConnection();

System.out.println(urlConn.getContent());
System.out.println(urlConn.getRequestMethod());
System.out.println(""+urlConn.getResponseCode());
/*DataInputStream inStream = new DataInputStream(

urlConn.getInputStream());
int ch;

//display
while ((ch = inStream.read()) >= 0) {
System.out.print((char) ch);}Top

7 楼flytsu(卡休) 回复于 2001-09-17 16:06:37 得分 45

给你发到信箱里了。Top

8 楼skyyoung(路人甲) 回复于 2001-09-17 16:35:39 得分 0

http://www.jscape.com/jhttp.htmlTop

9 楼javastone(顽石) 回复于 2001-09-17 17:52:25 得分 5

public InputStream sendPostMessage(Properties args1)
throws IOException
{
String argString = "";
if (args1 != null)
{
argString = toEncodedString(args1);
}
URLConnection con = servlet.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
DataOutputStream out = new DataOutputStream(con.getOutputStream());
out.writeBytes(argString);
out.flush();
out.close();
return con.getInputStream();
}
试试,比较好用。

分享到:
评论

相关推荐

    JAVA模拟网页发送请求

    以下是如何使用Java模拟POST请求的步骤: ##### 代码示例: ```java // 创建URL对象 URL url = new URL("http://www.xyz.com/"); // 创建HttpURLConnection对象 HttpURLConnection huc = (HttpURLConnection) url....

    java模拟post请求发送json的例子

    总结来说,当你需要在Java中模拟POST请求发送JSON数据时,可以根据项目需求选择合适的方法。如果对性能和简洁性有较高要求,可以使用`HttpURLConnection`;如果需要更丰富的功能和易用性,`HttpClient`可能是更好的...

    java后台实现 get post 提交.zip

    在Java中,我们通常使用`java.net.URL`和`java.net.HttpURLConnection`来发送GET请求。以下是一个简单的示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net....

    java处理文件上传的底层实现以及java模拟post协议实现文件上传

    本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...

    java模拟post请求

    总的来说,Java模拟POST请求涉及到网络通信和HTTP协议的理解,通过Apache HttpClient库可以方便地实现这一功能。在处理API交互时,正确构建请求和解析响应是关键,这有助于确保数据的准确性和系统的稳定性。

    后台模拟发送GET和POST请求

    本文将深入探讨如何利用Java的HttpClient库在后台模拟发送GET和POST请求,以及如何处理中文乱码问题。 首先,我们来理解GET和POST两种请求方法。GET请求通常用于获取服务器上的资源,它将参数附加到URL中,具有可...

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 ...通过上述示例和解释,你应该能够理解和掌握如何使用Java HttpClient库来发送GET和POST请求,这对于开发Web应用程序或与API接口交互至关重要。

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...

    java网络爬虫模拟登入抓取数据

    在"GetData_Demo"的示例中,可能包含了使用Java实现的模拟登录和数据抓取代码。通过分析和运行这个示例,你可以更深入地理解如何在实际项目中应用上述概念。这个过程可能涉及网络编程、HTML解析、HTTP协议、Cookie...

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    java 模拟登录(含验证码)

    Java模拟登录的关键步骤包括: 1. **构建HTTP请求**:使用像`HttpURLConnection`或者第三方库如`Apache HttpClient`或`OkHttp`,创建一个指向登录页面的POST请求。你需要设置请求头,比如`Content-Type`通常设为`...

    Java模拟get/post登陆(含验证码)

    本篇文章将深入探讨如何使用Java模拟GET/POST登录,特别是涉及验证码处理的情况。我们将主要关注Httpclient库的使用,以及可能涉及到的图像识别技术(OCR)。 首先,让我们了解一下HTTP的基本概念。HTTP是超文本...

    Java模拟登录百度Demo

    本项目名为"Java模拟登录百度Demo",旨在通过Java编程语言实现对百度网站的自动登录功能。在这个教程中,我们将深入探讨如何使用Java来完成这一目标。 首先,模拟登录的核心是发送HTTP请求。在Java中,我们可以使用...

    模拟表单post提交

    GET用于获取资源,而POST用于向服务器发送数据,如用户填写的表单信息。Java作为一个强大的后端开发语言,提供了多种库来帮助开发者模拟表单的POST提交,其中之一就是Apache的HttpClient。 HttpClient是一个功能...

    java模拟淘宝登录源码

    Java模拟淘宝登录源码是一种常见的网络编程技术,主要用于自动化测试、数据抓取或者模拟用户行为。在这个场景中,我们使用的工具是HTTPClient库,这是一个强大的Java HTTP客户端应用编程接口,可以方便地处理HTTP...

    java模拟发送form-data的请求方式

    Java 提供了多种模拟发送 Form-Data 的请求方式,下面将介绍其中的一种使用 Apache HttpComponents 库的方法。 首先,需要导入 Apache HttpComponents 库的相关依赖项,包括 `httpclient` 和 `httpmime`。 ```java...

    如何用selenium封装post参数提交示例

    在某些场景下,我们需要模拟POST请求来与服务器进行数据交互,这通常是HTTP协议中的一个方法,用于发送数据到服务器以创建或更新资源。在描述中提到的,我们将探讨如何使用Selenium来封装POST参数并提交,以获取异步...

    HttpUtils Java get post 工具类

    在这个方法中,我们使用了Apache HttpClient库的MultipartEntityBuilder来构建一个包含文件和文本参数的多部分实体,然后通过HttpPost发送。 **4. 测试** 为了确保HttpUtils工具类的功能正确,通常会编写测试类。在...

    java爬虫模拟登陆源码

    5. **抓取数据**:使用保存的Session或Cookie,发送GET请求到目标页面,获取登录后的数据。这一步可以使用Jsoup库解析HTML,提取需要的信息。 关于提供的"java模拟登陆"源码,它可能是实现了上述步骤的一个Java项目...

    HttpClient模拟get,post请求并发送请求参数(json等)

    它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...

Global site tag (gtag.js) - Google Analytics