博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java模拟HTTP的Get和Post请求
阅读量:6758 次
发布时间:2019-06-26

本文共 8441 字,大约阅读时间需要 28 分钟。

借助Apache Commons-httpclient的力量,轻松实现了对HTTP请求的模拟!
 
下面是一个测试代码:
import org.apache.commons.httpclient.HttpClient; 

import org.apache.commons.httpclient.HttpMethod; 

import org.apache.commons.httpclient.HttpStatus; 

import org.apache.commons.httpclient.URIException; 

import org.apache.commons.httpclient.methods.GetMethod; 

import org.apache.commons.httpclient.methods.PostMethod; 

import org.apache.commons.httpclient.params.HttpMethodParams; 

import org.apache.commons.httpclient.util.URIUtil; 

import org.apache.commons.lang.StringUtils; 

import org.apache.commons.logging.Log; 

import org.apache.commons.logging.LogFactory; 


import java.io.IOException; 

import java.util.HashMap; 

import java.util.Iterator; 

import java.util.Map; 


/** 
* HTTP工具箱 
* @author leizhimin 2009-6-19 16:36:18 
*/
 

public 
final 
class HttpTookit { 

        
private 
static Log log = LogFactory.getLog(HttpTookit.
class); 


        
/** 
         * 执行一个HTTP GET请求,返回请求响应的HTML 
         * 
         * @param url                 请求的URL地址 
         * @param queryString 请求的查询参数,可以为null 
         * @return 返回请求响应的HTML 
         */
 

        
public 
static String doGet(String url, String queryString) { 

                String response = 
null

                HttpClient client = 
new HttpClient(); 

                HttpMethod method = 
new GetMethod(url); 

                
try { 

                        
if (StringUtils.isNotBlank(queryString)) 

                                method.setQueryString(URIUtil.encodeQuery(queryString)); 

                        client.executeMethod(method); 

                        
if (method.getStatusCode() == HttpStatus.SC_OK) { 

                                response = method.getResponseBodyAsString(); 

                        } 

                } 
catch (URIException e) { 

                        log.error(
"执行HTTP Get请求时,编码查询字符串“" + queryString + 
"”发生异常!", e); 

                } 
catch (IOException e) { 

                        log.error(
"执行HTTP Get请求" + url + 
"时,发生异常!", e); 

                } 
finally { 

                        method.releaseConnection(); 

                } 

                
return response; 

        } 


        
/** 
         * 执行一个HTTP POST请求,返回请求响应的HTML 
         * 
         * @param url        请求的URL地址 
         * @param params 请求的查询参数,可以为null 
         * @return 返回请求响应的HTML 
         */
 

        
public 
static String doPost(String url, Map<String, String> params) { 

                String response = 
null

                HttpClient client = 
new HttpClient(); 

                HttpMethod method = 
new PostMethod(url); 

                
for (Iterator it = params.entrySet().iterator(); it.hasNext();) { 


                } 

                
//设置Http Post数据 

                
if (params != 
null) { 

                        HttpMethodParams p = 
new HttpMethodParams(); 

                        
for (Map.Entry<String, String> entry : params.entrySet()) { 

                                p.setParameter(entry.getKey(), entry.getValue()); 

                        } 

                        method.setParams(p); 

                } 

                
try { 

                        client.executeMethod(method); 

                        
if (method.getStatusCode() == HttpStatus.SC_OK) { 

                                response = method.getResponseBodyAsString(); 

                        } 

                } 
catch (IOException e) { 

                        log.error(
"执行HTTP Post请求" + url + 
"时,发生异常!", e); 

                } 
finally { 

                        method.releaseConnection(); 

                } 


                
return response; 

        } 


        
public 
static 
void main(String[] args) { 

                String x = doPost(
"http://lavasoft.blog.51cto.com/62575/64994", new HashMap()); 
                System.out.println(x); 
        } 
}
 
运行后打印结果如下:
<
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
> 

<
html 
xmlns
="http://www.w3.org/1999/xhtml" 
> 

<
head
> 

<
meta 
http-equiv
="Content-Type"  
content
="text/html;  charset=gb2312"
> 

<
title
>Java中使用正则表达式校验字符串 - 熔    岩 - 51CTO技术博客
</title> 

<
meta 
name
="description" 
content
="Java中使用正则表达式校验字符串正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系。至于具体谁发明的,怎么发明的,我也忘记了:)。 正则表达式简单理解就是.."
> 

<
meta 
name
="keywords" 
content
="Java中使用正则表达式校验字符串"
> 

<
meta 
http-equiv
="Cache-Control" 
content
="private"
> 

<
base 
href
="http://lavasoft.blog.51cto.com/"
>
</base> 

<
script 
src
="/js/def.js"
>
</script> 

<
SCRIPT language=javascript 
src
="http://blog.51cto.com/js/message.js" type=text/javascript
>
</SCRIPT> 

<
SCRIPT language=javascript 
src
="http://blog.51cto.com/js/user_comment.js" type=text/javascript
>
</SCRIPT> 

<
SCRIPT language=javascript 
src
="http://blog.51cto.com/js/base2.js" type=text/javascript
>
</SCRIPT> 

<
SCRIPT language=javascript 
src
="http://blog.51cto.com/js/dialog_utf8.js" type=text/javascript
>
</SCRIPT> 

<
link 
href
="/css/skin/2.css" 
rel
="stylesheet" 
type
="text/css"
> 

<
link 
href
="/css/group/group.css" 
rel
="stylesheet" 
type
="text/css"
> 

<
link 
rel
="alternate" 
href
="../rss.php?uid=62575" 
type
="application/rss+xml" 
title
="RSS 2.0"
> 

<
link 
rel
="edituri" 
type
="application/rsd+xml" 
title
="rsd" 
href
="xmlrpc.php?rsd=1" 
/> 

<
script
> 

var myid = ""; 

function add_flink(){ 

  if(myid){ 

    var url='/mod/edit_flink.php?type=addflink&uid=62575&flink=http://lavasoft.blog.51cto.com'; 

    var ajax = InitAjax1(); 

    ajax.open("GET", url, true); 

    ajax.onreadystatechange = function() { 

      if (ajax.readyState == 4 && ajax.status == 200) { 

        if(ajax.responseText==""){ 

          alert("添加成功。"); 

        } 

        if(ajax.responseText=="1"){ 

        alert("链接指向自己。"); 

        } 

        if(ajax.responseText=="2"){ 

        alert("友情链接已存在。") 

        } 

      } 

    } 

    ajax.send(null); 

  }else{ 


  var refurlk = "http://lavasoft.blog.51cto.com/62575/64994";    


    commentSubmit("",refurlk); 

    return false; 

  } 

    


function sendmessage(){ 


  var refurlk = "http://lavasoft.blog.51cto.com/62575/64994";    


  if(myid){ 

    return true; 

  }else{ 

    commentSubmit("",refurlk); 

    return false; 

  } 


function copylink(ourl){ 

  if(!ourl){ 

    var clipBoardContent = "http://lavasoft.blog.51cto.com"; 

  }else{ 

    var clipBoardContent = ourl; 

  } 

  window.clipboardData.setData("Text",clipBoardContent); 

  alert("复制成功!"); 

  return false; 


function correctPNG() { 

if (document.getElementById('blog_touxian')) 


var img = document.getElementById('blog_touxian'); 

            var imgName = img.src.toUpperCase() 

            var imgID = (img.id) ? "id='" + img.id + "' " : "" 

            var imgClass = (img.className) ? "class='" + img.className + "' " : "" 

            var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' " 

            var imgStyle = "display:inline-block;" + img.style.cssText    

            if (img.align == "left") imgStyle = "float:left;" + imgStyle 

            if (img.align == "right") imgStyle = "float:right;" + imgStyle 

            if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle                 

            var strNewHTML = "<span " + imgID + imgClass + imgTitle 

                 + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" 

                 + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" 

                 + "(src=\'" + img.src + "\', sizingMethod='scale');\">
</span>" ; 

            img.outerHTML = strNewHTML; 

}    


//window.attachEvent(" correctPNG); 

window. 

</script> 

<
style 
type
="text/css"
> 

#layout_0{ 

  width:; 

  float:left; 


#layout_1{ 

  width:; 

  float:left; 


#layout_3{ 

  width:; 

  float:left; 


.albumalert{ 

  width:250px; 

  height:150px; 

  background:#fff; 

  border:1px solid #777; 


.alerttitle{ 

  text-align:left; 

  color:#000; 

  padding:6px; 

  background-image:url("http://img1.51cto.com/images/quickwindow.jpg"); 

  background-repeat:repeat-x; 

  font-size:14px; 

  height:22px; 


.alertcentent{ 

  line-height:30px; 


.alertcentent p{ 

color:#000; 

}
 
以上代码省略了N多行。
 
另外,我再给出一个朋友写的机器人程序,恶搞飞信诈骗网站的例子。欢迎多多运行,搞死这些骗子:
import java.io.BufferedReader; 

import java.io.BufferedWriter; 

import java.io.InputStream; 

import java.io.InputStreamReader; 

import java.io.OutputStreamWriter; 

import java.net.HttpURLConnection; 

import java.net.ProtocolException; 

import java.net.URL; 


import com.verisign.uuid.UUID; 


/** 
* 向一个飞信诈骗网站自动提交垃圾信息的程序,用空可以运行一下。 
* @author wangpeng 
*/
 

public 
class AutoSubmit { 


  
/** 
    * @param args 
    * @throws Exception    
    */
 

  
public 
static 
void main(String[] args) 
throws Exception { 

    
for(
int i=0; i < 100000; i++){ 

      post(i); 

    } 

  } 

    

  
private 
static 
void post(
int i) 
throws Exception{ 

    String s = UUID.generate().toString(); 

    String s1 = s.substring(0,2); 

    s = s1+ s.substring(s.length() - 3, s.length()); 

     

    URL url = 
new URL(
"http://yfs88.sv10.sgedns.cn/yy/e/qq22.asp");// 提交地址 
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setDoOutput(true);// 打开写入属性 
    httpURLConnection.setDoInput(true);// 打开读取属性 
    httpURLConnection.setRequestMethod("POST");// 设置提交方法 
    httpURLConnection.setConnectTimeout(50000);// 连接超时时间 
    httpURLConnection.setReadTimeout(50000); 
    httpURLConnection.connect(); 
     
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(httpURLConnection.getOutputStream(), "GBK")); 
    out.write("name=" + s + i +  //用户名不能重复 
        "&password=748" + 
        "&sex=日你很行" + 
        "&oicq=748748" + 
        "&icq=748748" + 
        "&msn=caonima" + 
        "&shengri=再不关门滚蛋,就把你们全关起来" + 
        "&home=已经盯上你们了");//要post的数据,多个以&符号分割 
    out.flush(); 
    out.close(); 
     
    //读取post之后的返回值 
//    BufferedReader in = new BufferedReader(new InputStreamReader((InputStream) httpURLConnection.getInputStream())); 
//    String line = null; 
//    StringBuilder sb = new StringBuilder(); 
//    while ((line = in.readLine()) != null) { 
//      sb.append(line); 
//    } 
//    in.close(); 
//    System.out.println("client:" + sb.toString()); 
     
    httpURLConnection.disconnect();//断开连接 
    // 
    System.out.println("client post ok:" + i); 
  } 
}
 
上面程序师通过JDK的原生API实现的,很不错的一个程序。
从上面也可以看出,注册表单的验证码是多么重要了,呵呵!
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/168276,如需转载请自行联系原作者
你可能感兴趣的文章
DataTable的用法
查看>>
教育部老师远程培训课程听课点击器
查看>>
表操作汇总(复制,删除,修改,插入,查询及数据库的复制)
查看>>
redis 基本数据类型-列表(List)
查看>>
H5开发推荐使用Q.js,轻量的前端单页路由框架
查看>>
一些简单的递归算法
查看>>
list切片的补充
查看>>
pdf生成库-libharu编译
查看>>
[Python]处理windows下多级目录文件,上传到Linux服务器
查看>>
java enum用法
查看>>
3月11日工作日志
查看>>
弹性盒布局(flex)
查看>>
《梦断代码》读后笔记_1
查看>>
设计模式学习笔记之责任链模式
查看>>
1597: [Usaco2008 Mar]土地购买
查看>>
Oracle数值处理函数 (绝对值、取整...)
查看>>
年薪10W和100w的人差距在哪?
查看>>
Redis的集群安装以及rehash重新迁移教程指南
查看>>
怎样去掉hyperlinkButton 控件的下划线 --两种方式
查看>>
Linux篇---Vi的使用
查看>>