http-java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别

问题描述

java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别

PostMethod
HttpPost 尤其是在cookie和保存信息方面有什么不同?求大神解释
我抛砖引玉,上代码!

import java.io.BufferedReader;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class Byrbt {

/**
 * @param args
 * @throws Exception
 */
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    //先下载登陆页面
    URL login=new URL("http://bt.byr.cn/login.php");

    InputStreamReader isr=new InputStreamReader(login.openStream(),"utf-8");

    BufferedReader br=new BufferedReader(isr);

    String line="";

    String html="";

    while((line=br.readLine())!=null){
        //html=html+line+"n";
        html+=line;
    }

    Document doc=Jsoup.parse(html);

    //找到图片,下载图片

    String imgSrc="";

    imgSrc=doc.body().getElementsByAttribute("method").select("tr").select("img").attr("src").toString();

    String realSrc="http://bt.byr.cn/"+imgSrc;

    System.out.println(realSrc);

    getPhotoFromWeb(realSrc);

    String imgString="";
    String imgHash="";

    imgHash=realSrc.split("imagehash=")[1];

    System.out.println("输入d盘里的验证码");
    Scanner sca =new Scanner(System.in);

    imgString=sca.next();

    //登陆

    HttpClient httpClient=new HttpClient();

    httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

    PostMethod post = new PostMethod("http://bt.byr.cn/login.php");
    post.setRequestHeader(new Header(
                    "User-Agent",
                    "Mozilla/5.0 /Windows; U; Windows NT 4.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.0"));
    post.addParameter("username", "wingrove");
    post.addParameter("password","jiao12" );
    post.addParameter("imagestring",imgString);
    post.addParameter("imagehash",imgHash);

    httpClient.executeMethod(post);

    System.out.println("GET POST STATUS: "+ post.getStatusLine().toString());

// GetMethod get = new GetMethod("http://bt.byr.cn/torrents.php?cat=406");
// get.setRequestHeader(new Header(
// "User-Agent",
// "Mozilla/5.0 /Windows; U; Windows NT 4.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.0"));

// httpClient.executeMethod(get);
//

isr=new InputStreamReader(post.getResponseBodyAsStream(),"utf-8");

    br=new BufferedReader(isr);

    line="";
    html="";

    while((line=br.readLine())!=null){
        html=html+line+"n";
    }

    System.out.println(html);

}
public static void getPhotoFromWeb(String urlString) throws MalformedURLException, Exception{
    //这个程序只适用于网络,不适用于本地可能是由于url的局限

    URL url = new URL(urlString);
    File outFile =new File("d:/CAPTCHA.jpg");
    OutputStream os = new FileOutputStream(outFile);
    InputStream is = url.openStream();
    byte[] buff = new byte[1024];
    while(true) {
        int readed = is.read(buff);
        if(readed == -1) {
            break;
        }
        byte[] temp = new byte[readed];
        System.arraycopy(buff, 0, temp, 0, readed);
        os.write(temp);
    }
    is.close();
    os.close();

}

}

private void doPost(String url, Map<String, String> headers, String body) throws IOException {

02 HttpPost post = new HttpPost(url);
03 for (Map.Entry header : headers.entrySet()) {
04 post.setHeader(header.getKey(), header.getValue());
05 }
06 post.setEntity(new StringEntity(body));
07 HttpContext context = createBasicAuthContext("admin", "password");
08 CloseableHttpResponse response = client.execute(host, post, context);
09 try {
10 // status = response.getStatusLine().getStatusCode();
11 // headers = response.getAllHeaders();
12

13 // HttpEntity entity = response.getEntity();
14 // text = IOUtils.toString(entity.getContent(), "ISO-8859-1");
15 } finally {
16 response.close();
17 }
18 }

解决方案

比如你有一个页面index.html,这个页面有一个文本域,名称是:a,值是123,你用get提交后,你的url会变成:index.html?a=123,在获取的时候,就是从浏览器中回去参数了,而不是表单!
由于是这样,get方式提交表单,参数有限,不能提交大量数据,而且安全性不高!
用post方式提交,就不会使用url传参数,而且数据量几乎没有限制,这样可以提交大量的数据,安全性可靠!(拾人牙慧)

时间: 2024-12-21 22:42:12

http-java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别的相关文章

在ASP应用程序中限制重复提交同一表单

程序|重复|重复提交|重复提交    在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单.缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等.或许一些asp初学者并不清楚在asp应用中如何限制重复提交同一表单,所以在这里向大家介绍在ASP应用中防止用户在当前会话期间多次提交同一表单的一个简单方法.    这个工作主要由四个子程序组成,在较为简单的应用场合,你只要将这些代码放在包含文件中直接引用即可:对于那些较为复杂的环境,我

asp中实现限制重复提交同一表单

重复|重复提交 在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单.缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等.或许一些asp初学者并不清楚在asp应用中如何限制重复提交同一表单,所以在这里向大家介绍在ASP应用中防止用户在当前会话期间多次提交同一表单的一个简单方法. 这个工作主要由四个子程序组成,在较为简单的应用场合,你只要将这些代码放在包含文件中直接引用即可:对于那些较为复杂的环境,我们在文章的最后给出一些改进建

在jsp中提交form表单不能跳转进方法

问题描述 在jsp中提交form表单不能跳转进方法 我用的form表单提交的,jsp里 这样,js是function search(){ var myselec = $('#myselectHidden').val(); $.ajax({ type:'POST', data: {param:"myselec",isAll:"yes",param2:myselec}, url:'outQueryOption', success:function(data){ var

JAVA防止重复提交Web表单的方法_java

本文实例讲述了JAVA防止重复提交Web表单的方法.分享给大家供大家参考,具体如下: package cn.com.form; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import javax.servlet.ServletException; import java

在ASP应用程序中限制重复提交同一表单_应用技巧

在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表 单.缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等.或许一些 asp初学者并不清楚在asp应用中如何限制重复提交同一表单,所以在这里向大家介绍在ASP应用中防止 用户在当前会话期间多次提交同一表单的一个简单方法.  这个工作主要由四个子程序组成,在较为简单的应用场合,你只要将这些代码放在包含文件中直 接引用即可:对于那些较为复杂的环境,我们在文章的最后给出一些改进建议.

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作

本教程基于Laravel 5.4 开始之前首先准备好开发环境,我们假设你已经安装好 Laravel,至于 Vue 的引入,请参考官方文档. 做好上述准备工作后就可以开始我们的开发了,本教程中我们将演示文章发布页面的表单 验证 . 首先在 routes/web.php 中新增两条路由规则: Route::get('post/create', 'PostController@create'); Route::post('post/save', 'PostController@save'); 然后在项

easyui-easyUI先提交form表单做条件查询返回的结果加载到datagrid中,应该怎么做?

问题描述 easyUI先提交form表单做条件查询返回的结果加载到datagrid中,应该怎么做? 我是这么写的,但是这样form表单提交不到后台去,不知道怎么做 $('#tt').datagrid({ pageNumber : curr url : $('#bas').val() + '/showUser.action' onLoadSuccess : function() { } onLoadError : function() { $('#tt').datagrid('appendRow'

Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

        在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEclipse和Tomcat配置Servlet的过程和简单实现表单提交功能.         希望对大家有所帮助,参考书籍<Java EE企业级应用开发实例教程>.         Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 一. Servlet编程

Struts中提交中文表单到ActionForm的乱码问题解决办法

由于Struts框架直接把表单数据发送给了ActionForm,所以这里面没有对HttpRequestServlet进行SetCharacterEncoding,所以默认是按照ISO-8859-1(参见Tomcat 源代码中的org.apache.catalina.connector.HttpRequestBase中的protected void parseParameters()方法),解决的方法,就是在表单提交到ActionForm之前对request进行编码. 第一种方法,就是写一个过滤器