JAVA发送HTTP请求的四种方式总结
源代码:http://github.com/lovewenyo/HttpDemo
1.HttpURLConnection
使用JDK原生提供的net,无需其他jar包;
HttpURLConnection是URLConnection的子类,提供更多的方法,使用更方便。
packagehttpURLConnection;
importjava.io.BufferedReader;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.net.HttpURLConnection;
importjava.net.URL;
publicclassHttpURLConnectionHelper{
publicstaticStringsendRequest(StringurlParam,StringrequestType){
HttpURLConnectioncon=null;
BufferedReaderbuffer=null;
StringBufferresultBuffer=null;
try{
URLurl=newURL(urlParam);
//得到连接对象
con=(HttpURLConnection)url.openConnection();
//设置请求类型
con.setRequestMethod(requestType);
//设置请求需要返回的数据类型和字符集类型
con.setRequestProperty("Content-Type","application/json;charset=GBK");
//允许写出
con.setDoOutput(true);
//允许读入
con.setDoInput(true);
//不使用缓存
con.setUseCaches(false);
//得到响应码
intresponseCode=con.getResponseCode();
if(responseCode==HttpURLConnection.HTTP_OK){
//得到响应流
InputStreaminputStream=con.getInputStream();
//将响应流转换成字符串
resultBuffer=newStringBuffer();
Stringline;
buffer=newBufferedReader(newInputStreamReader(inputStream,"GBK"));
while((line=buffer.readLine())!=null){
resultBuffer.append(line);
}
returnresultBuffer.toString();
}
}catch(Exceptione){
e.printStackTrace();
}
return"";
}
publicstaticvoidmain(String[]args){
Stringurl="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
System.out.println(sendRequest(url,"POST"));
}
}
2.URLConnection
使用JDK原生提供的net,无需其他jar包;
建议使用HttpURLConnection
packageuRLConnection;
importjava.io.BufferedReader;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.net.URLConnection;
publicclassURLConnectionHelper{
publicstaticStringsendRequest(StringurlParam){
URLConnectioncon=null;
BufferedReaderbuffer=null;
StringBufferresultBuffer=null;
try{
URLurl=newURL(urlParam);
con=url.openConnection();
//设置请求需要返回的数据类型和字符集类型
con.setRequestProperty("Content-Type","application/json;charset=GBK");
//允许写出
con.setDoOutput(true);
//允许读入
con.setDoInput(true);
//不使用缓存
con.setUseCaches(false);
//得到响应流
InputStreaminputStream=con.getInputStream();
//将响应流转换成字符串
resultBuffer=newStringBuffer();
Stringline;
buffer=newBufferedReader(newInputStreamReader(inputStream,"GBK"));
while((line=buffer.readLine())!=null){
resultBuffer.append(line);
}
returnresultBuffer.toString();
}catch(Exceptione){
e.printStackTrace();
}
return"";
}
publicstaticvoidmain(String[]args){
Stringurl="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
System.out.println(sendRequest(url));
}
}
3.HttpClient
使用方便,我个人偏爱这种方式,但依赖于第三方jar包,相关maven依赖如下:
commons-httpclient commons-httpclient 3.1 packagehttpClient; importjava.io.IOException; importorg.apache.commons.httpclient.HttpClient; importorg.apache.commons.httpclient.HttpException; importorg.apache.commons.httpclient.methods.GetMethod; importorg.apache.commons.httpclient.methods.PostMethod; importorg.apache.commons.httpclient.params.HttpMethodParams; publicclassHttpClientHelper{ publicstaticStringsendPost(StringurlParam)throwsHttpException,IOException{ //创建httpClient实例对象 HttpClienthttpClient=newHttpClient(); //设置httpClient连接主机服务器超时时间:15000毫秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //创建post请求方法实例对象 PostMethodpostMethod=newPostMethod(urlParam); //设置post请求超时时间 postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,60000); postMethod.addRequestHeader("Content-Type","application/json"); httpClient.executeMethod(postMethod); Stringresult=postMethod.getResponseBodyAsString(); postMethod.releaseConnection(); returnresult; } publicstaticStringsendGet(StringurlParam)throwsHttpException,IOException{ //创建httpClient实例对象 HttpClienthttpClient=newHttpClient(); //设置httpClient连接主机服务器超时时间:15000毫秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //创建GET请求方法实例对象 GetMethodgetMethod=newGetMethod(urlParam); //设置post请求超时时间 getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,60000); getMethod.addRequestHeader("Content-Type","application/json"); httpClient.executeMethod(getMethod); Stringresult=getMethod.getResponseBodyAsString(); getMethod.releaseConnection(); returnresult; } publicstaticvoidmain(String[]args)throwsHttpException,IOException{ Stringurl="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96"; System.out.println(sendPost(url)); System.out.println(sendGet(url)); } }4.Socket
使用JDK原生提供的net,无需其他jar包;
使用起来有点麻烦。
packagesocket; importjava.io.BufferedInputStream; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.IOException; importjava.io.InputStreamReader; importjava.io.OutputStreamWriter; importjava.net.Socket; importjava.net.URLEncoder; importjavax.net.ssl.SSLSocket; importjavax.net.ssl.SSLSocketFactory; publicclassSocketForHttpTest{ privateintport; privateStringhost; privateSocketsocket; privateBufferedReaderbufferedReader; privateBufferedWriterbufferedWriter; publicSocketForHttpTest(Stringhost,intport)throwsException{ this.host=host; this.port=port; /** *http协议 */ //socket=newSocket(this.host,this.port); /** *https协议 */ socket=(SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(this.host,this.port); } publicvoidsendGet()throwsIOException{ //StringrequestUrlPath="/z69183787/article/details/17580325"; StringrequestUrlPath="/"; OutputStreamWriterstreamWriter=newOutputStreamWriter(socket.getOutputStream()); bufferedWriter=newBufferedWriter(streamWriter); bufferedWriter.write("GET"+requestUrlPath+"HTTP/1.1\r\n"); bufferedWriter.write("Host:"+this.host+"\r\n"); bufferedWriter.write("\r\n"); bufferedWriter.flush(); BufferedInputStreamstreamReader=newBufferedInputStream(socket.getInputStream()); bufferedReader=newBufferedReader(newInputStreamReader(streamReader,"utf-8")); Stringline=null; while((line=bufferedReader.readLine())!=null){ System.out.println(line); } bufferedReader.close(); bufferedWriter.close(); socket.close(); } publicvoidsendPost()throwsIOException{ Stringpath="/"; Stringdata=URLEncoder.encode("name","utf-8")+"="+URLEncoder.encode("张三","utf-8")+"&"+ URLEncoder.encode("age","utf-8")+"="+URLEncoder.encode("32","utf-8"); //Stringdata="name=zhigang_jia"; System.out.println(">>>>>>>>>>>>>>>>>>>>>"+data); OutputStreamWriterstreamWriter=newOutputStreamWriter(socket.getOutputStream(),"utf-8"); bufferedWriter=newBufferedWriter(streamWriter); bufferedWriter.write("POST"+path+"HTTP/1.1\r\n"); bufferedWriter.write("Host:"+this.host+"\r\n"); bufferedWriter.write("Content-Length:"+data.length()+"\r\n"); bufferedWriter.write("Content-Type:application/x-www-form-urlencoded\r\n"); bufferedWriter.write("\r\n"); bufferedWriter.write(data); bufferedWriter.write("\r\n"); bufferedWriter.flush(); BufferedInputStreamstreamReader=newBufferedInputStream(socket.getInputStream()); bufferedReader=newBufferedReader(newInputStreamReader(streamReader,"utf-8")); Stringline=null; while((line=bufferedReader.readLine())!=null) { System.out.println(line); } bufferedReader.close(); bufferedWriter.close(); socket.close(); } publicstaticvoidmain(String[]args)throwsException{ /** *http协议测试 */ //SocketForHttpTestforHttpTest=newSocketForHttpTest("www.baidu.com",80); /** *https协议测试 */ SocketForHttpTestforHttpTest=newSocketForHttpTest("www.baidu.com",443); try{ forHttpTest.sendGet(); //forHttpTest.sendPost(); }catch(IOExceptione){ e.printStackTrace(); } } }总结
到此这篇关于JAVA发送HTTP请求的文章就介绍到这了,更多相关JAVA发送HTTP请求内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。