java发送http get请求,有两种方式。
第一种用URLConnection:
public static String get(String url) throws IOException { BufferedReader in = null; URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = in.readLine()) != null) { sb.append(line); } in.close(); return sb.toString(); }
第二种用java HTTP客户端:HttpGet、HttpClient、HttpResponse等
public static String httpGet(String url, String charset) throws HttpException, IOException { String json = null; HttpGet httpGet = new HttpGet(); // 设置参数 try { httpGet.setURI(new URI(url)); } catch (URISyntaxException e) { throw new HttpException("请求url格式错误。"+e.getMessage()); } // 发送请求 HttpClient client=HttpClients.createDefault(); HttpResponse httpResponse = client.execute(httpGet); // 获取返回的数据 HttpEntity entity = httpResponse.getEntity(); byte[] body = EntityUtils.toByteArray(entity); StatusLine sL = httpResponse.getStatusLine(); int statusCode = sL.getStatusCode(); if (statusCode == 200) { json = new String(body, charset); entity.consumeContent(); } else { throw new HttpException("statusCode="+statusCode); } return json; }
POST请求同理,这里只列出URLConnection方式:
public static String post(String url, String param, Map<String, String> header) throws IOException { PrintWriter out = null; BufferedReader in = null; String result = ""; URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); //设置超时时间 conn.setConnectTimeout(5000); conn.setReadTimeout(15000); // 设置通用的请求属性 if (header != null) { for (Map.Entry<String, String> entry : header.entrySet()) { conn.setRequestProperty(entry.getKey(), entry.getValue()); } } conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(), "utf8")); String line; while ((line = in.readLine()) != null) { result += line; } if (out != null) { out.close(); } if (in != null) { in.close(); } return result; }
代理
如果使用代理的话可以按如下编写一个设置代理的函数configProxy,然后在发送请求前调用一下这个函数就行了:
package com.tpot.DataDownload; import java.util.Properties; public class Configer { public static void configProxy(){ Properties prop=System.getProperties(); prop.setProperty("proxySet","true"); prop.setProperty("http.proxyHost","proxy.xxxx.com"); prop.setProperty("http.proxyPort","8080"); prop.setProperty("http.proxyUser","xxxxx"); prop.setProperty("http.proxyPassword","xxxxx"); prop.setProperty("https.proxyHost","proxy.xxxxx.com"); prop.setProperty("https.proxyPort","8080"); prop.setProperty("https.proxyUser","xxxxx"); prop.setProperty("https.proxyPassword","xxxxx"); } }