使用HttpURLConnection 模拟浏览器发送(get,post)请求
上代码了:
public
static
final
String DEF_CHATSET =
"UTF-8"
;
public
static
final
int
DEF_CONN_TIMEOUT =
30000
;
public
static
final
int
DEF_READ_TIMEOUT =
30000
;
public
static
String userAgent =
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"
;
//配置您申请的KEY
public
static
final
String APPKEY =
"*************************"
;
/**
* 请求url地址
* @param strUrl 请求地址
* @param params 请求参数
* @param method 请求方法
* @return 网络请求字符串
* @throws Exception
*/
public
static
String net(String strUrl, Map params,String method)
throws
Exception {
HttpURLConnection conn =
null
;
BufferedReader reader =
null
;
String rs =
null
;
try
{
StringBuffer sb =
new
StringBuffer();
if
(method==
null
|| method.equals(
"GET"
)){
strUrl = strUrl+
"?"
+urlencode(params);
}
URL url =
new
URL(strUrl);
conn = (HttpURLConnection) url.openConnection();
if
(method==
null
|| method.equals(
"GET"
)){
conn.setRequestMethod(
"GET"
);
}
else
{
conn.setRequestMethod(
"POST"
);
conn.setDoOutput(
true
);
}
conn.setRequestProperty(
"User-agent"
, userAgent);
conn.setUseCaches(
false
);
conn.setConnectTimeout(DEF_CONN_TIMEOUT);
conn.setReadTimeout(DEF_READ_TIMEOUT);
conn.setInstanceFollowRedirects(
false
);
conn.connect();
if
(params!=
null
&& method.equals(
"POST"
)) {
try
{
DataOutputStream out =
new
DataOutputStream(conn.getOutputStream());
out.writeBytes(urlencode(params));
}
catch
(Exception e) {
// TODO: handle exception
}
}
InputStream is = conn.getInputStream();
reader =
new
BufferedReader(
new
InputStreamReader(is, DEF_CHATSET));
String strRead =
null
;
while
((strRead = reader.readLine()) !=
null
) {
sb.append(strRead);
}
rs = sb.toString();
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(reader !=
null
) {
reader.close();
}
if
(conn !=
null
) {
conn.disconnect();
}
}
return
rs;
}
//将map型转为请求参数型
public
static
String urlencode(Map<String,String> data) {
StringBuilder sb =
new
StringBuilder();
for
(Map.Entry i : data.entrySet()) {
try
{
sb.append(i.getKey()).append(
"="
).append(URLEncoder.encode(i.getValue()+
""
,
"UTF-8"
)).append(
"&"
);
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return
sb.toString();
}
//测试请求
public
static
void
getRequest2(){
String result =
null
;
Map params =
new
HashMap();
//请求参数
params.put(
"train_no"
,
""
);
//列次编号,对应12306订票①:查询车次中返回的train_no
params.put(
"from_station_no"
,
""
);
//出发站序号,对应12306订票①:查询车次中返回的from_station_no
params.put(
"to_station_no"
,
""
);
//出发站序号,对应12306订票①:查询车次中返回的to_station_no
params.put(
"date"
,
""
);
//默认当天,格式:2014-12-25
params.put(
"key"
,APPKEY);
//应用APPKEY(应用详细页查询)
try
{
result =net(url, params,
"GET"
);
JSONObject object = JSONObject.fromObject(result);
if
(object.getInt(
"error_code"
)==
0
){
System.out.println(object.get(
"result"
));
}
else
{
System.out.println(object.get(
"error_code"
)+
":"
+object.get(
"reason"
));
}
}
catch
(Exception e) {
e.printStackTrace();
}
}