package com.hxkj.weatherwarn.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
import sun.net.www.protocol.http.HttpURLConnection;
/**
* http的工具类
*
* HTTP协议:
* 把HTTP协议理解为写信的过程;
* 通过firebug,可以查看每一个链接向服务器发出的详细信息;
* 请求头======向服务器写信的信封
* 响应头======服务器的回信的信封
* 参数=====向服务器写信的内容(信封里面的内容)
* 响应=====服务器的回信的信封里面的内容
* @author gyq
*
*/
public class HttpUtil
{
/**
* httpget方式请求
* 参数==发信
* @param urlStr 请求地址
* @param headerMap 信封的内容,请求头信息
* @param paramsMap 信的内容,请求的参数
* @return 返回url对应的网页内容;回信的内容,响应的内容
*/
public String methodGet(String urlStr,Map<String ,String> headerMap,Map<String,String> paramsMap)
{
StringBuffer sb=new StringBuffer();
/*get提交*/
try
{
if(!urlStr.endsWith("?"))
{
urlStr+="?";
}
/*get方式将参数信息传过去,并且进行拼接*/
for (Iterator iterator = paramsMap.entrySet().iterator(); iterator.hasNext();)
{
Entry entry = (Entry) iterator.next();
urlStr+=entry.getKey()+"="+entry.getValue()+"&";
}
urlStr=urlStr.substring(0, urlStr.length()-1);
ConstatFinalUtil.LOGGER.info("urlStr:{}",urlStr);
/* 根据指定url字符串创建一个url对象 */
URL url=new URL(urlStr);
/* 查看一个urlConnection具体是什么
* 强转HttpURLConnection; 因为urlConnection本身就是HttpURLConnection;通过debug看到的
*/
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
/* 如何将信封的内容设置到请求中 设置请求头信息*/
for (Iterator iterator = headerMap.entrySet().iterator(); iterator.hasNext();)
{
Entry entry = (Entry) iterator.next();
urlConnection.setRequestProperty(entry.getKey()+"", entry.getValue()+"");
}
/*获取输入流*/
//InputStream is=urlConnection.getInputStream();
GZIPInputStream gzipInputStream=new GZIPInputStream(urlConnection.getInputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(gzipInputStream,"utf-8"));
String line="";
while((line=br.readLine())!=null)
{
sb.append(line);
}
} catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
/**
* httppost请求
* @param urlStr
* @param headerMap
* @param paramsMap
* @return
*/
public String methodPost(String urlStr,Map<String ,String> headerMap,Map<String,String> paramsMap)
{
StringBuffer sb=new StringBuffer();
try
{
URL url=new URL(urlStr);
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
/* 发送POST请求必须设置如下两行*/
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
/*设置超时时间*/
urlConnection.setConnectTimeout(ConstatFinalUtil.CONNECTION_TIMEOUT);
urlConnection.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT);
/* 如何将信封的内容设置到请求中 设置请求头信息*/
for (Iterator iterator = headerMap.entrySet().iterator(); iterator.hasNext();)
{
Entry entry = (Entry) iterator.next();
urlConnection.setRequestProperty(entry.getKey()+"", entry.getValue()+"");
}
OutputStream os=urlConnection.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
/*输入输出流通过firebug发现post请求,发送的是以下字符串
* returnUrl=&email=22%4022.com&password=111111ddd&code=dddd*/
StringBuffer paramSb=new StringBuffer();
for (Iterator iterator = paramsMap.keySet().iterator(); iterator.hasNext();)
{
String key = (String) iterator.next();
/*通过key来获取键和值*/
paramSb.append(key+"="+paramsMap.get(key)+"&");
}
/*把信息发送到服务器*/
bw.write(paramSb.toString());
bw.flush();
bw.close();
/*传参数*/
GZIPInputStream gzipInputStream=new GZIPInputStream(urlConnection.getInputStream());
//InputStream is=urlConnection.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(gzipInputStream, "utf-8"));
String line="";
while((line=bufferedReader.readLine())!=null)
{
sb.append(line);
}
} catch (IOException e)
{
/*异常记录到日志文件中*/
ConstatFinalUtil.LOGGER.error("发送post请求失败:Url:{},参数:{},返回:{}",urlStr,paramsMap,sb,e);
}
return sb.toString();
}
}
package com.gyq.yxl.outer.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.gyq.xyl.common.util.ConstatFinalUtil;
import com.gyq.xyl.common.util.HttpUtil;
public class SpiderTest
{
@Test
public void findbai()
{
HttpUtil httpUtil=new HttpUtil();
String urlStr="";
/*请求头*/
Map<String ,String> headerMap=new HashMap<String, String>();
headerMap.put("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
headerMap.put("Accept-Encoding", "gzip, deflate, br");
headerMap.put("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
headerMap.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0");
/*请求参数*/
Map<String,String> paramsMap=new HashMap<String, String>();
paramsMap.put("id", "12");
paramsMap.put("name", "gyq");
String response=httpUtil.methodGet(urlStr, headerMap, paramsMap);
//String response=httpUtil.methodPost(urlStr, headerMap, paramsMap);
ConstatFinalUtil.LOGGER.info("响应:{}",response);
}
@Test
public void tohtml()
{
HttpUtil httpUtil=new HttpUtil();
String urlStr="";
/*请求头*/
Map<String ,String> headerMap=new HashMap<String, String>();
headerMap.put("myheader","gyq");
/*headerMap.put("Accept-Encoding", "gzip, deflate, br");
headerMap.put("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
headerMap.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0");*/
/*请求参数*/
Map<String,String> paramsMap=new HashMap<String, String>();
paramsMap.put("email", "[email protected]");
paramsMap.put("password", "123456");
paramsMap.put("code", "0825");
System.out.println();
//String response=httpUtil.methodGet(urlStr, headerMap, paramsMap);
String response=httpUtil.methodPost(urlStr, headerMap, paramsMap);
ConstatFinalUtil.LOGGER.info("响应:{}",response);
}
/**
* 测试返回json
*/
@Test
public void testJson()
{
HttpUtil httpUtil=new HttpUtil();
String urlStr="";
/*请求头*/
Map<String ,String> headerMap=new HashMap<String, String>();
headerMap.put("myheader","gyq");
/* 参数 */
Map<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("json", "{'ver':'v1','data':{'id':'8'}}");
String response = httpUtil.methodPost(urlStr,headerMap,paramsMap);
ConstatFinalUtil.LOGGER.info("响应:{}",response);
}
}
java 模拟http的get和post请求
猜你喜欢
转载自blog.csdn.net/sinat_30777203/article/details/64124533
今日推荐
周排行