java如何利用java.net.URLConnection发送HTTP请求

如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。下面是由本站小编为大家整理的java如何利用onnection发送HTTP请求,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业生考试网!

java如何利用java.net.URLConnection发送HTTP请求

  运用原生Java Api发送简单的Get请求、Post请求步骤

1.通过统一资源定位器()获取连接器(onnection)

2.设置请求的参数

3.发送请求

4.以输入流的.形式获取返回内容

5.关闭输入流

发送请求与接收响应流类 HttpRequestor

package ;

import eredReader;

import ception;

import tStream;

import tStreamReader;

import utStream;

import utStreamWriter;

import URLConnection;

import SocketAddress;

import y;

import ;

import onnection;

import ator;

import ;

public class HttpRequestor {

private String charset = "utf-8";

private Integer connectTimeout = null;

private Integer socketTimeout = null;

private String proxyHost = null;

private Integer proxyPort = null;

/**

* Do GET request

* @param url

* @return

* @throws Exception

* @throws IOException

*/

public String doGet(String url) throws Exception {URL localURL = new URL(url);

URLConnection connection = Connection(localURL);HttpURLConnection httpURLConnection = (HttpURLConnection)connection;equestProperty("Accept-Charset", charset);equestProperty("Content-Type", "application/x-www-form-urlencoded");InputStream inputStream = null;

InputStreamReader inputStreamReader = null;BufferedReader reader = null;

StringBuffer resultBuffer = new StringBuffer();String tempLine = null;

//响应失败

if (esponseCode() >= 300) {throw new Exception("HTTP Request is not success, Response code is " + esponseCode());}

try {

inputStream = nputStream();inputStreamReader = new InputStreamReader(inputStream);reader = new BufferedReader(inputStreamReader);while ((tempLine = Line()) != null) {nd(tempLine);

}

} finally {

if (reader != null) {

e();

}

if (inputStreamReader != null) {

e();

}

if (inputStream != null) {

e();

}

}

return ring();

}

/**

* Do POST request

* @param url

* @param parameterMap

* @return

* @throws Exception

*/

public String doPost(String url, Map parameterMap) throws Exception {/* Translate parameter map to parameter date string */StringBuffer parameterBuffer = new StringBuffer();if (parameterMap != null) {

Iterator iterator = et()ator();String key = null;

String value = null;

while (ext()) {

key = (String)();

if ((key) != null) {

value = (String)(key);

} else {

value = "";

}

nd(key)nd("=")nd(value);if (ext()) {

nd("&");

}

}

}

tln("POST parameter : " + ring());URL localURL = new URL(url);

URLConnection connection = Connection(localURL);HttpURLConnection httpURLConnection = (HttpURLConnection)connection;oOutput(true);

equestMethod("POST");equestProperty("Accept-Charset", charset);equestProperty("Content-Type", "application/x-www-form-urlencoded");equestProperty("Content-Length", eOf(th()));OutputStream outputStream = null;

OutputStreamWriter outputStreamWriter = null;InputStream inputStream = null;

InputStreamReader inputStreamReader = null;BufferedReader reader = null;

StringBuffer resultBuffer = new StringBuffer();String tempLine = null;

try {

outputStream = utputStream();outputStreamWriter = new OutputStreamWriter(outputStream);e(ring());h();

//响应失败

if (esponseCode() >= 300) {throw new Exception("HTTP Request is not success, Response code is " + esponseCode());}

//接收响应流

inputStream = nputStream();inputStreamReader = new InputStreamReader(inputStream);reader = new BufferedReader(inputStreamReader);while ((tempLine = Line()) != null) {nd(tempLine);

}

} finally {

if (outputStreamWriter != null) {

e();

}

if (outputStream != null) {

e();

}

if (reader != null) {

e();

}

if (inputStreamReader != null) {

e();

}

if (inputStream != null) {

e();

}

}

return ring();

}

private URLConnection openConnection(URL localURL) throws IOException {URLConnection connection;

if (proxyHost != null && proxyPort != null) {Proxy proxy = new Proxy(, new InetSocketAddress(proxyHost, proxyPort));connection = Connection(proxy);} else {

connection = Connection();

}

return connection;

}

/**

* Render request according setting

* @param request

*/

private void renderRequest(URLConnection connection) {if (connectTimeout != null) {

onnectTimeout(connectTimeout);}

if (socketTimeout != null) {

eadTimeout(socketTimeout);}

}

/*

* Getter & Setter

*/

public Integer getConnectTimeout() {

return connectTimeout;

}

public void setConnectTimeout(Integer connectTimeout) {ectTimeout = connectTimeout;

}

public Integer getSocketTimeout() {

return socketTimeout;

}

public void setSocketTimeout(Integer socketTimeout) {etTimeout = socketTimeout;

}

public String getProxyHost() {

return proxyHost;

}

public void setProxyHost(String proxyHost) {yHost = proxyHost;

}

public Integer getProxyPort() {

return proxyPort;

}

public void setProxyPort(Integer proxyPort) {yPort = proxyPort;

}

public String getCharset() {

return charset;

}

public void setCharset(String charset) {

set = charset;

}

}

  为测试方便,新建一个项目,并新建一个Servlet,接收post请求并对HttpRequestor请求响应,发出响应流:此处使用了

注解: @WebServlet("/LoginServlet") ,也可以在配置Servletpackage nServlet;

import ception;

import letException;

import ervlet;import Servlet;

import ServletRequest;import ServletResponse;/**

* Servlet implementation class LoginServlet*/

@WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()

*/

public LoginServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

tln("111");

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

String username = arameter("username");String blog = arameter("blog");tln(username);

tln(blog);

ontentType("text/plain; charset=UTF-8");haracterEncoding("UTF-8");

//响应流

riter()e("It is ok!");

}

}

测试类

package ;

import Map;

import ;

public class Test {

public static void main(String[] args) {

/* Post Request */

Map dataMap = new HashMap();

("username", "Nick Huang");

("blog", "IT");

try {

tln(new HttpRequestor()st("http://localhost:8081/TestProgect2/LoginServlet", dataMap));//tln(new HttpRequestor()t("http://localhost:8081/TestProgect2/LoginServlet"));} catch (Exception e) {

// TODO Auto-generated catch block

tStackTrace();

}

/* Get Request */

}

}

1.接收post请求类LoginServlet,控制台测试结果Requestor接收LoginServlet返回的流

OK,完成

对于接收TestProgect2项目中类返回的流,在真实环境中可能是异步接收返回的流的,当一台机器A向另外一台机器B发送请求,B接收到A的信息,将信息处理后,需要将处理结果返回即响应返回给A,A会接收到B返回的信息可以另外建一个Servlet类来专门异步接收返回的信息package ;

import eredReader;

import ception;

import tStream;

import tStreamReader;

import letException;

import ervlet;import Servlet;

import ServletRequest;import ServletResponse;/**

* Servlet implementation class HttpListenerServlet*/

@WebServlet("/HttpListenerServlet")

public class HttpListenerServlet extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()

*/

public HttpListenerServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

InputStream inputStream = null;

inputStream = nputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader reader = new BufferedReader(inputStreamReader);String tempLine = null;

StringBuffer resultBuffer=new StringBuffer();while ((tempLine = Line()) != null) {nd(tempLine);

}

tln(ring());}

}