本文涉及3個基本點(diǎn):
1、因?yàn)楹芏喙镜膬?nèi)網(wǎng)都設(shè)有代理,瀏覽器通過ip與port上網(wǎng),而java代碼模擬http get方式同樣需要外網(wǎng)代理;
2、Java實(shí)現(xiàn)http的Get/Post請求代碼;
3、主要是設(shè)置HttpURLConnection請求頭里面的屬性
比如Cookie、User-Agent(瀏覽器類型)等等。
比如:http請求中添加Header
1
|
conn.setRequestProperty( "Authorization" , authorization); |
注:我就在網(wǎng)上找的一段Get/Post模擬請求代碼,添加了下代理的配置,整合完成的。
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
126
127
128
129
130
131
132
133
134
135
136
137
|
package com.pasier.quanzi.web.controller; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { public static void main(String[] args) { // 如果不設(shè)置,只要代理IP和代理端口正確,此項(xiàng)不設(shè)置也可以 System.getProperties().setProperty( "http.proxyHost" , "10.22.40.32" ); System.getProperties().setProperty( "http.proxyPort" , "8080" ); // 判斷代理是否設(shè)置成功 // 發(fā)送 GET 請求 System.out.println(sendGet( "http://www.baidu.com" , "param1=xxx¶m2=yyy" )); // 發(fā)送 POST 請求 } /** * 向指定URL發(fā)送GET方法的請求 * * @param url * 發(fā)送請求的URL * @param param * 請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。 * @return URL 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果 */ public static String sendGet(String url, String param) { String result = "" ; BufferedReader in = null ; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打開和URL之間的連接 URLConnection connection = realUrl.openConnection(); // 設(shè)置通用的請求屬性 connection.setRequestProperty( "accept" , "*/*" ); connection.setRequestProperty( "connection" , "Keep-Alive" ); connection.setRequestProperty( "user-agent" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" ); // 建立實(shí)際的連接 connection.connect(); // 獲取所有響應(yīng)頭字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍歷所有的響應(yīng)頭字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定義 BufferedReader輸入流來讀取URL的響應(yīng) in = new BufferedReader( new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null ) { result += line; } } catch (Exception e) { System.out.println( "發(fā)送GET請求出現(xiàn)異常!" + e); e.printStackTrace(); } // 使用finally塊來關(guān)閉輸入流 finally { try { if (in != null ) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 發(fā)送POST方法的請求 * * @param url * 發(fā)送請求的 URL * @param param * 請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。 * @return 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果 */ public static String sendPost(String url, String param) { PrintWriter out = null ; BufferedReader in = null ; String result = "" ; try { URL realUrl = new URL(url); // 打開和URL之間的連接 URLConnection conn = realUrl.openConnection(); // 設(shè)置通用的請求屬性 conn.setRequestProperty( "accept" , "*/*" ); conn.setRequestProperty( "connection" , "Keep-Alive" ); conn.setRequestProperty( "user-agent" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" ); // 發(fā)送POST請求必須設(shè)置如下兩行 conn.setDoOutput( true ); conn.setDoInput( true ); // 獲取URLConnection對象對應(yīng)的輸出流 out = new PrintWriter(conn.getOutputStream()); // 發(fā)送請求參數(shù) out.print(param); // flush輸出流的緩沖 out.flush(); // 定義BufferedReader輸入流來讀取URL的響應(yīng) in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null ) { result += line; } } catch (Exception e) { System.out.println( "發(fā)送 POST 請求出現(xiàn)異常!" + e); e.printStackTrace(); } // 使用finally塊來關(guān)閉輸出流、輸入流 finally { try { if (out != null ) { out.close(); } if (in != null ) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } } |
以上這篇java模擬http的Get/Post請求,并設(shè)置ip與port代理的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。