wingrove 2013-12-13 05:52 采纳率: 0%
浏览 15504
已采纳

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 }

  • 写回答

1条回答

  • 上官竹 2014-01-16 06:48
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示