java 模拟浏览器请求_java模拟浏览器发送请求

本文介绍了如何使用Java模拟浏览器进行GET和POST请求。通过HttpURLConnection和DefaultHttpClient类,分别展示了GET请求和POST请求的实现过程,包括设置请求头、编码参数、处理响应等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 packagetest;2

3 importjava.io.BufferedReader;4 importjava.io.DataOutputStream;5 importjava.io.IOException;6 importjava.io.InputStreamReader;7 importjava.net.HttpURLConnection;8 importjava.net.URL;9 importjava.net.URLEncoder;10

11 importjavax.servlet.http.HttpServletRequest;12

13 importorg.apache.http.HttpEntity;14 importorg.apache.http.HttpResponse;15 importorg.apache.http.client.ClientProtocolException;16 importorg.apache.http.client.methods.HttpGet;17 importorg.apache.http.client.methods.HttpPost;18 importorg.apache.http.client.utils.HttpClientUtils;19 importorg.apache.http.entity.StringEntity;20 importorg.apache.http.impl.client.DefaultHttpClient;21 importorg.apache.http.util.EntityUtils;22

23 public classTestRequestUtil {24 //public static void main(String[] args) {25 //doGetStr("http://dzdzwxcs1.ciitc.com.cn/s/VcbrYFtK");26 //}

27 /**

28 * 接口调用 GET29 */

30 public static voidhttpURLConectionGET(String urls) {31 try{32 URL url = new URL(urls); //把字符串转换为URL请求地址

33 HttpURLConnection connection = (HttpURLConnection) url.openConnection();//打开连接

34 connection.connect();//连接会话35 //获取输入流

36 BufferedReader br = new BufferedReader(newInputStreamReader(connection.getInputStream()));37 String line;38 StringBuilder sb = newStringBuilder();39 while ((line = br.readLine()) != null) {//循环读取流

40 sb.append(line); //写入对象中

41 }42 br.close();//关闭流

43 connection.disconnect();//断开连接

44 System.out.println(sb.toString());45 } catch(Exception e) {46 e.printStackTrace();47 System.out.println("请求失败!");48 }49 }50

51 /**

52 * 接口调用 POST53 */

54 public static voidhttpURLConnectionPOST(String urls) {55 try{56 URL url = newURL(urls);57

58 //将url 以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接)

59 HttpURLConnection connection = (HttpURLConnection) url.openConnection();//此时cnnection只是为一个连接对象,待连接中60

61 //设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)

62 connection.setDoOutput(true);63

64 //设置连接输入流为true

65 connection.setDoInput(true);66

67 //设置请求方式为post

68 connection.setRequestMethod("POST");69

70 //post请求缓存设为false

71 connection.setUseCaches(false);72

73 //设置该HttpURLConnection实例是否自动执行重定向

74 connection.setInstanceFollowRedirects(true);75

76 //设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)77 //application/x-javascript text/xml->xml数据 application/x-javascript->json对象78 //application/x-www-form-urlencoded->表单数据

79 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");80

81 //建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)

82 connection.connect();83

84 //创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)

85 DataOutputStream dataout = newDataOutputStream(connection.getOutputStream());86 String parm = "storeId=" + URLEncoder.encode("32", "utf-8"); //URLEncoder.encode()方法 为字符串进行编码87

88 //将参数输出到连接

89 dataout.writeBytes(parm);90

91 //输出完成后刷新并关闭流

92 dataout.flush();93 dataout.close(); //重要且易忽略步骤 (关闭流,切记!)

94

95 System.out.println(connection.getResponseCode());96

97 //连接发起请求,处理服务器响应 (从连接获取到输入流并包装为bufferedReader)

98 BufferedReader bf = new BufferedReader(newInputStreamReader(connection.getInputStream()));99 @SuppressWarnings("unused")100 String line = null;101 StringBuilder sb = new StringBuilder(); //用来存储响应数据102

103 //循环读取流,若不到结尾处

104 while ((line = bf.readLine()) != null) {105 sb.append(bf.readLine());106 }107 bf.close(); //重要且易忽略步骤 (关闭流,切记!)

108 connection.disconnect(); //销毁连接

109 System.out.println(sb.toString());110

111 } catch(Exception e) {112 e.printStackTrace();113 }114 }115

116 /**

117 * get 请求@param @paramurl@returnString@throws

118 */

119 public staticString doGetStr(String url) {120 DefaultHttpClient httpClient = newDefaultHttpClient();121 HttpGet httpGet = newHttpGet(url);122 String result = "";123

124 try{125 HttpResponse response =httpClient.execute(httpGet);126 HttpEntity entity =response.getEntity();127 if (entity != null) {128 result = EntityUtils.toString(entity, "UTF-8");129 }130 } catch(ClientProtocolException e) {131 e.printStackTrace();132 } catch(IOException e) {133 e.printStackTrace();134 } finally{135 HttpClientUtils.closeQuietly(httpClient);136 }137 returnresult;138 }139

140 /**

141 * post 请求@param @paramurl@param @paramoutStr@throws

142 */

143 public staticString doPostStr(String url, String outStr) {144 DefaultHttpClient httpClient = newDefaultHttpClient();145 HttpPost httpPost = newHttpPost();146 String result = "";147

148 try{149 httpPost.setEntity(new StringEntity(outStr, "UTF-8"));150 HttpResponse response =httpClient.execute(httpPost);151 result = EntityUtils.toString(response.getEntity(), "UTF-8");152 } catch(ClientProtocolException e) {153 e.printStackTrace();154 } catch(IOException e) {155 e.printStackTrace();156 } finally{157 HttpClientUtils.closeQuietly(httpClient);158 }159 returnresult;160 }161 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值