java几种http的请求方式(post/get)

本文详细介绍了HTTP POST请求的实现方式,包括使用URLConnection、HttpURLConnection和HTTPClient三种方法,并提供了具体的代码示例。文章深入浅出地阐述了每种方法的原理和使用场景,旨在帮助开发者更好地理解和运用HTTP POST请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、采用URLConnection(POST)

 

 public static String sendPost(String url, String param) {
	        PrintWriter out = null;
	        BufferedReader in = null;
	        String result = "";
	        try {
	            URL realUrl = new URL(url);
	            // 打开和URL之间的连接
	            URLConnection conn = realUrl.openConnection();
	            // 设置通用的请求属性
	            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()));
	            String line;
	            while ((line = in.readLine()) != null) {
	                result += line;
	            }
	        } catch (Exception e) {
	            System.out.println("发送 POST 请求出现异常!"+e);
	            e.printStackTrace();
	        }
	        //使用finally块来关闭输出流、输入流
	        finally{
	            try{
	                if(out!=null){
	                    out.close();
	                }
	                if(in!=null){
	                    in.close();
	                }
	            }
	            catch(IOException ex){
	                ex.printStackTrace();
	            }
	        }
	        return result;
	  }

 

 

2、使用HttpURLConnection(POST)

 

  public static String postTo(String strURL, String params) {  
	        try {  
	            URL url = new URL(strURL);// 创建连接  
	            HttpURLConnection connection = (HttpURLConnection) url  
	                    .openConnection();  
	            connection.setDoOutput(true);  
	            connection.setDoInput(true);  
	            connection.setUseCaches(false);  
	            connection.setInstanceFollowRedirects(true);  
	            connection.setRequestProperty("Connection", "Keep-Alive");
	            connection.setRequestMethod("POST"); // 设置请求方式  
	            connection.setRequestProperty("Accept", "application/text"); // 设置接收数据的格式  
	            connection.setRequestProperty("Content-Type", "application/text"); // 设置发送数据的格式  
	            
	            connection.connect();  
	            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "GBK"); // utf-8编码  
	            out.append(params);  
	            out.flush();  
	            out.close();  
	            // 读取响应  
	            int length = (int) connection.getContentLength();// 获取长度  
	            InputStream is = connection.getInputStream();  
	            if (length != -1) {  
	                byte[] data = new byte[length];  
	                byte[] temp = new byte[512];  
	                int readLen = 0;  
	                int destPos = 0;  
	                while ((readLen = is.read(temp)) > 0) {  
	                    System.arraycopy(temp, 0, data, destPos, readLen);  
	                    destPos += readLen;  
	                }  
	                String result = new String(data, "GBK"); // utf-8编码  
	                System.out.println(result);  
	                return result;  
	            }  
	        } catch (IOException e) {  
	            // TODO Auto-generated catch block  
	            e.printStackTrace();  
	        }  
	        return "error"; // 自定义错误信息  
	    }  

 

 

3、使用HTTPClient(POST), 其中参数为键值对,返回值为字节数组。

	@SuppressWarnings("unchecked")
	public static byte[] doHttpRequest(String host, Map<String, String> params)
			throws IOException {
		byte[] bt = null;
		Map<String, String> map = null == params ? new HashMap<String, String>()
				: params;
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpPost httpost = new HttpPost(host);
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		Iterator it = map.entrySet().iterator();

		while (it.hasNext()) {
			Map.Entry<String, String> entry = (Entry<String, String>) it.next();
			nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
		}

		httpost.setEntity(new UrlEncodedFormEntity(nvps, "GBK"));
		HttpResponse response = httpclient.execute(httpost);

		if (200 != response.getStatusLine().getStatusCode()) {
			throw new RuntimeException("http返回状态"
					+ response.getStatusLine().getStatusCode());
		}

		InputStream in = response.getEntity().getContent();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();

		int temp;
		byte[] buf = new byte[1024];
		while ((temp = in.read(buf, 0, buf.length)) != -1) {
			bos.write(buf, 0, temp);
		}

		bt = bos.toByteArray();
		return bt;
	}

 

4、httpclient get请求,返回为String

	public static String getHttpRequestContent(String serialUrl, String encode)
			throws ClientProtocolException, IOException {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpGet httpGet = new HttpGet(serialUrl);
		HttpResponse response = httpclient.execute(httpGet);

		if (200 != response.getStatusLine().getStatusCode()) {
			throw new RuntimeException("http返回状态"
					+ response.getStatusLine().getStatusCode());
		}

		HttpEntity entity = response.getEntity();
		InputStreamReader in = new InputStreamReader(entity.getContent(),
				encode == null ? HTTP.UTF_8 : encode);
		BufferedReader reader = new BufferedReader(in);
		String line = null;
		String content = "";

		while (null != (line = reader.readLine())) {
			content += line;
		}

		in.close();
		reader.close();
		httpclient.getConnectionManager().shutdown();

		return content;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值