1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package com.li.utli;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import com.li.bean.Result;
/** * 发送请求
*
*
*/
public class SendRequest {
//这是模拟get请求
public static Result sendGet(String url,Map<String,String> headers,Map<String,String> params,String encoding, boolean duan) throws ClientProtocolException, IOException{
//实例化一个Httpclient的
DefaultHttpClient client = new DefaultHttpClient();
//如果有参数的就拼装起来
url = url+( null ==params? "" :assemblyParameter(params));
//这是实例化一个get请求
HttpGet hp = new HttpGet(url);
//如果需要头部就组装起来
if ( null !=headers)hp.setHeaders(assemblyHeader(headers));
//执行请求后返回一个HttpResponse
HttpResponse response = client.execute(hp);
//如果为true则断掉这个get请求
if (duan) hp.abort();
//返回一个HttpEntity
HttpEntity entity = response.getEntity();
//封装返回的参数
Result result= new Result();
//设置返回的cookie
result.setCookie(assemblyCookie(client.getCookieStore().getCookies()));
//设置返回的状态
result.setStatusCode(response.getStatusLine().getStatusCode());
//设置返回的头部信心
result.setHeaders(response.getAllHeaders());
//设置返回的信息
result.setHttpEntity(entity);
return result;
}
public static Result sendGet(String url,Map<String,String> headers,Map<String,String> params,String encoding) throws ClientProtocolException, IOException{
return sendGet(url, headers, params, encoding, false );
}
//这是模拟post请求
public static Result sendPost(String url,Map<String,String> headers,Map<String,String> params,String encoding) throws ClientProtocolException, IOException{
//实例化一个Httpclient的
DefaultHttpClient client = new DefaultHttpClient();
//实例化一个post请求
HttpPost post = new HttpPost(url);
//设置需要提交的参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String temp : params.keySet()) {
list.add( new BasicNameValuePair(temp,params.get(temp)));
}
post.setEntity( new UrlEncodedFormEntity(list,encoding));
//设置头部
if ( null !=headers)post.setHeaders(assemblyHeader(headers));
//实行请求并返回
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
//封装返回的参数
Result result = new Result();
//设置返回状态代码
result.setStatusCode(response.getStatusLine().getStatusCode());
//设置返回的头部信息
result.setHeaders(response.getAllHeaders());
//设置返回的cookie信心
result.setCookie(assemblyCookie(client.getCookieStore().getCookies()));
//设置返回到信息
result.setHttpEntity(entity);
return result ;
}
//这是组装头部
public static Header[] assemblyHeader(Map<String,String> headers){
Header[] allHeader= new BasicHeader[headers.size()];
int i = 0 ;
for (String str :headers.keySet()) {
allHeader[i] = new BasicHeader(str,headers.get(str));
i++;
}
return allHeader;
}
//这是组装cookie
public static String assemblyCookie(List<Cookie> cookies){
StringBuffer sbu = new StringBuffer();
for (Cookie cookie : cookies) {
sbu.append(cookie.getName()).append( "=" ).append(cookie.getValue()).append( ";" );
}
if (sbu.length()> 0 )sbu.deleteCharAt(sbu.length()- 1 );
return sbu.toString();
}
//这是组装参数
public static String assemblyParameter(Map<String,String> parameters){
String para = "?" ;
for (String str :parameters.keySet()) {
para+=str+ "=" +parameters.get(str)+ "&" ;
}
return para.substring( 0 ,para.length()- 1 );
}
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package com.li.bean;
import java.util.HashMap;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
/** * 封住请求返回的参数
*
*
*/
public class Result {
private String cookie;
private int statusCode;
private HashMap<String, Header> headerAll;
private HttpEntity httpEntity;
public String getCookie() {
return cookie;
}
public void setCookie(String cookie) {
this .cookie = cookie;
}
public int getStatusCode() {
return statusCode;
}
public void setStatusCode( int statusCode) {
this .statusCode = statusCode;
}
public HashMap<String, Header> getHeaders() {
return headerAll;
}
public void setHeaders(Header[] headers){
headerAll = new HashMap<String, Header>();
for (Header header : headers) {
headerAll.put(header.getName(), header);
}
}
public HttpEntity getHttpEntity() {
return httpEntity;
}
public void setHttpEntity(HttpEntity httpEntity) {
this .httpEntity = httpEntity;
}
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.li.utli;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** * 根据正则从HTML中提取响应的数据
*
*
*/
public class HtmlParse {
public static List<String> prase(String html,String regex, int number){
Pattern patten = Pattern.compile(regex);
Matcher mat = patten.matcher(html);
List<String> list = new ArrayList<String>();
while (mat.find()) {
if (number==- 1 ){
list.add(mat.group());
continue ;
}
if (number> 0 ){
list.add(mat.group());
number--;
} else {
break ;
}
}
return list;
}
public static List<String> prase(String html,String regex){
return prase(html, regex, - 1 );
}
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package com.li.main;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.util.EntityUtils;
import com.li.bean.Result;
import com.li.utli.HtmlParse;
import com.li.utli.SendRequest;
import com.li.utli.VerificationcCode;
/** * 百度贴吧的发帖及其回贴
*
*
*/
public class BaiduTieBaNDWS {
public static String reply(String content, String postsUrl,String cookie) throws ClientProtocolException, IOException {
//这是一些可有可无的头部信息,有的时候不需要,但是有的时候确需要,所以建议大家最好加上!
Map<String,String> headers = new HashMap<String,String>();
headers.put( "Referer" , postsUrl);
headers.put( "Host" , "tieba.baidu.com" );
headers.put( "Cookie" ,cookie);
//这是从帖子中获取一些发帖时候必备的参数
String html = EntityUtils.toString(SendRequest.sendGet(postsUrl, headers, null , "utf-8" ).getHttpEntity(), "utf-8" );
String needParametersResolve[] = HtmlParse.prase(html, "kw:'.+',ie:'utf-8',rich_text:'\\d+',floor_num:'\\d+',fid:'\\d+',tid:'\\d+',tfrom:'\\d+',user_type:'\\d+'" ).get( 0 ).replaceAll( "'" , "" ).split( "," );
String floor_num = needParametersResolve[ 3 ].split( ":" )[ 1 ];
String fid = needParametersResolve[ 4 ].split( ":" )[ 1 ];
String tid = needParametersResolve[ 5 ].split( ":" )[ 1 ];
String kw =needParametersResolve[ 0 ].split( ":" )[ 1 ];
String vk_code = EntityUtils.toString(SendRequest.sendGet( "http://tieba.baidu.com/f/user/json_vcode?lm=" +fid+ "&rs10=2&rs1=0&t=0.5954980056343667" , null , null , "utf-8" ).getHttpEntity(), "utf-8" );
String code = vk_code.split( "\"" )[ 7 ];
String tbs = EntityUtils.toString(SendRequest.sendGet( "http://tieba.baidu.com/dc/common/tbs?t=0.17514605234768638" , headers, null , "utf-8" ).getHttpEntity(), "utf-8" ).split( "\"" )[ 3 ];
//这是下载验证码
VerificationcCode.showGetVerificationcCode( "http://tieba.baidu.com/cgi-bin/genimg?" +code, null , "e:/1.png" );
//设置提交所有的参数
Map<String,String> parameters = new HashMap<String,String>();
parameters.put( "add_post_submit" , "发 表 " );
parameters.put( "kw" , kw);
parameters.put( "floor_num" , floor_num);
parameters.put( "ie" , "utf-8" );
parameters.put( "rich_text" , "1" );
parameters.put( "hasuploadpic" , "0" );
parameters.put( "fid" ,fid);
parameters.put( "rich_text" , "1" );
parameters.put( "tid" , tid);
parameters.put( "hasuploadpic" , "0" );
parameters.put( "picsign" , "" );
parameters.put( "quote_id" , "0" );
parameters.put( "useSignName" , "on" );
parameters.put( "content" , content);
parameters.put( "vcode_md5" , code);
parameters.put( "tbs" , tbs);
parameters.put( "vcode" , JOptionPane.showInputDialog( null ,
"<html><img src=\"file:///e:/1.png\" width=\33\" height=\55\"><br><center>请输入验证码</center><br></html>" ));
//准备好一切,回帖
Result res = SendRequest.sendPost( "http://tieba.baidu.com/f/commit/post/add" , headers, parameters, "utf-8" );
//回帖之后百度会返回一段json,说明是否回帖成功
return EntityUtils.toString(res.getHttpEntity(), "utf-8" );
}
//百度登陆
public static String testAccount(String name, String password) throws ClientProtocolException, IOException {
Map<String,String> parameters = new HashMap<String,String>();
parameters.put( "password" , password);
parameters.put( "username" , name);
String str = SendRequest.sendPost( "https://passport.baidu.com/?login" , null , parameters, "utf-8" ).getCookie();
return str;
}
} |
相关推荐
这个库广泛应用于Web服务调用、API接口测试以及自动化脚本中,因为它可以模拟浏览器的行为,进行GET、POST等复杂的HTTP请求。 在Java编程中,HttpClient提供了一个强大的API,允许我们创建自定义的HTTP请求,设置...
HttpClient4通过构建HTTP请求,设置请求头,如User-Agent(模拟浏览器标识),Cookie(用于保持登录状态)等,以及POST或GET参数,来模拟用户行为。在模拟登录过程中,我们需要获取登录页面的CSRF令牌(跨站请求伪造...
它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...
字符集使用UTF-8编码,数据通讯统一采用 HTTP 协议通讯,使用POST 方法请求并传递参数。 POST请求Content-Type 设置为application/x-www-form-urlencoded 除此之外,我们对请求添加签名的校验,key设置为X-Sign 接口...
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
HttpClient4是Apache软件基金会下的一个开源HTTP客户端库,它提供了强大的功能来执行HTTP请求并处理响应。这篇博客“HttpClient4模拟登录回贴”显然探讨了如何利用HttpClient4库进行网络模拟登录以及在特定网站上...
HttpClient模拟http发送post和get请求
在Java编程中,HttpClient库是Apache提供的一款强大的HTTP客户端工具,用于执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站...
总结来说,模拟登录微博平台,如新浪和腾讯,主要涉及HttpClient4的使用,包括创建HTTP客户端、构建POST请求、处理响应和Cookie管理。每个平台的登录细节可能略有不同,需要根据具体情况进行调整。了解这些知识点...
### Java中使用Apache HttpClient模拟Http请求 #### 1. 添加依赖 若要在Java项目中使用Apache HttpClient,首先需要添加对应的依赖。对于Maven项目,在`pom.xml`文件中添加如下依赖: ```xml <groupId>org....
HttpClient是Apache基金会开发的一个Java库,它为Java程序员提供了一个强大的工具来执行HTTP请求并处理响应。这个库广泛用于Web服务交互,特别是当需要模拟浏览器行为,如登录、提交表单或者处理网页上的动态内容时...
在使用HttpClient发送POST请求时,我们需要关心两个方面的问题:一是如何忽略证书验证过程,二是如何发送POST请求。对于前者,我们可以使用X509TrustManager来忽略证书验证过程。对于后者,我们可以使用HttpPost对象...
它允许开发者模拟浏览器行为,向服务器发送GET、POST或者其他HTTP方法的请求,并接收服务器的响应。在本实例中,我们将深入探讨如何使用HttpClient来发送请求以及处理返回的数据。 首先,让我们了解HttpClient的...
HttpClient4是中国开源软件社区Apache下的一个HTTP客户端编程工具包,主要用来进行HTTP协议通信,它为Java开发者提供了在Java环境中发送HTTP请求并处理响应的强大功能。这篇最新的文章“HttpClient4模拟登录腾讯微博...
HTTPClient 是一个强大的 Java 库,它允许程序员模拟 HTTP 请求,包括 POST 请求。在这个场景中,我们关注的是如何使用 HTTPClient 发送一个 JSON 格式的 POST 请求并封装表单数据。下面将详细介绍这个过程。 首先...
JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...
当我们谈论“浏览器发送模拟httpclient软件”时,我们指的是一个能够模拟浏览器行为的应用程序,允许用户通过编程方式执行HTTP请求,如POST和GET。 POST和GET是HTTP请求的两种主要方法。GET用于从服务器获取资源,...
Java HttpClient 4,也称为Apache HttpClient 4,是Apache软件基金会开发的一个HTTP客户端实现库,用于处理与HTTP服务器的交互。这个库在Java编程环境中广泛使用,尤其对于网络请求的发送和响应的处理,提供了强大而...
4. **执行请求**:现在,我们有了完整的请求,可以使用HttpClient的execute方法发送它。 ```java CloseableHttpResponse response = httpClient.execute(httpPost); ``` 5. **处理响应**:执行请求后,我们需要...