java http请求 get,post请求

方法一:
来自:https://blog.csdn.net/brushli/article/details/18075321

package com.springboot.dlc.utils;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class UrlUtil {
    public String sendMessage(String strReqJsonStr, String urlValue) {
        StringBuffer result = new StringBuffer();
        try {
            URL url = new URL(urlValue);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
            con.connect();

            OutputStream outputStream = con.getOutputStream();
            StringBuilder sb = new StringBuilder("xmldata=");
            sb.append("dom.asXML()");
            //参数
            outputStream.write(sb.toString().getBytes());
            outputStream.flush();
            log.info("HTTP状态码={}", con.getResponseCode());
            BufferedReader inn = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
            String value = inn.readLine();
            while (value != null) {
                result.append(value);
                value = inn.readLine();
            }

            inn.close();
            outputStream.close();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result.toString();
    }

    public String getMessage(String urlValue) {
        StringBuffer result = new StringBuffer();
        try {
            URL url = new URL(urlValue);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("GET");
            con.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
            con.connect();
            log.info("HTTP状态码={}", con.getResponseCode());
            BufferedReader inn = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
            String value = inn.readLine().trim();
            while (value != null) {
                if (!"".equals(value)) {
                    result.append(value.trim() + "\n");
                }
                value = inn.readLine();
            }
            inn.close();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result.toString();
    }

    public void test() {
        Map<String, String> paramsMap = new HashMap<>();
        String strReqJsonStr = JSON.toJSONString(paramsMap);
        String Message = sendMessage(strReqJsonStr, "https://www.showdoc.cc/");
        log.info("Message:{}", Message);
    }
}



方法二

HttpClientUtils 工具类

package com.springboot.dlc.utils;

import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.util.PublicSuffixMatcher;
import org.apache.http.conn.util.PublicSuffixMatcherLoader;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * HTTP 请求工具类
 * @author huaieli
 *
 */
public class HttpClientUtils {
	private static RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(15000)
            .setConnectTimeout(15000)
            .setConnectionRequestTimeout(15000)
            .build();

	/**
	 * 发送HTTP POST请求,支持带多个String参数
	 *
	 * @param url 链接
	 * @param paramMap 参数
	 */
	public static String sendHttpPost(String url, Map<String, String> paramMap) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		return sendHttpPost(url, paramMap, httpclient);
	}

	/**
	 * 发送HTTP POST请求,支持多个参数(注:多个参数需拼接)
	 *
	 * @param url 链接
	 * @param params 参数(格式:key1=value1&key2=value2)
	 */
	public static String sendHttpPost(String url, String params) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		return sendHttpPost(url, params, httpclient);
	}

	/**
	 * 发送HTTP POST请求,支持带一个文件参数
	 *
	 * @param url 链接
	 * @param file 文件
	 */
	public static String sendHttpPost(String url, File file) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
        try {
            HttpPost httpPost = new HttpPost(url);

            InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(file), -1, ContentType.APPLICATION_OCTET_STREAM);
            reqEntity.setChunked(true);

            httpPost.setEntity(reqEntity);

            return sendHttpPost(httpPost, httpclient);
        } finally {
            httpclient.close();
        }
	}

	/**
	 * 发送HTTP POST请求(客户端采用二进制流发送,服务端采用二进制流接收)
	 *
	 * @param url 链接
	 * @param binaryStreamsStr 参数
	 */
	public static String sendHttpPostByStream(String url, String binaryStreamsStr) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
        try {
            HttpPost httpPost = new HttpPost(url);

            HttpEntity reqEntity = new ByteArrayEntity(binaryStreamsStr.getBytes(Consts.UTF_8), ContentType.APPLICATION_JSON);

            httpPost.setEntity(reqEntity);

            return sendHttpPost(httpPost, httpclient);
        } finally {
            httpclient.close();
        }
	}

	/**
	 * 发送POST请求,支持带多个String参数和多个文件参数
	 *
	 * @param url 链接
	 * @param paraMap 参数集合
	 * @param fileMap 文件集合
	 */
	public static String sendHttpPostByFile(String url, Map<String, String> paraMap, Map<String, File> fileMap) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		try {
			HttpPost httpPost = new HttpPost(url);

			MultipartEntityBuilder builder = MultipartEntityBuilder.create();

			for (String key : paraMap.keySet()) {
				 builder.addPart(key, new StringBody(paraMap.get(key), ContentType.TEXT_PLAIN));
			}
			for (String fileStr : fileMap.keySet()) {
				builder.addPart(fileStr, new FileBody(fileMap.get(fileStr)));
			}

			HttpEntity reqEntity = builder.build();

			httpPost.setEntity(reqEntity);

			return sendHttpPost(httpPost, httpclient);
		} finally {
			httpclient.close();
		}
	}

	/**
	 * 发送HTTP GET请求,不带参数(注:可将参数加在url后面)
	 *
	 * @param url 链接
	 */
	public static String sendHttpGet(String url) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		try {
			return sendHttpGet(url, httpclient);
		} finally {
			httpclient.close();
		}
	}

	/**
	 * 发送HTTP GET请求,不带参数,返回byte数组
	 *
	 * @param url 链接
	 */
	public static byte[] sendHttpGetResByte(String url) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		try {
			return sendHttpGetResByte(url, httpclient);
		} finally {
			httpclient.close();
		}
	}

	/**
	 * 发送HTTP GET请求,支持多个参数(注:多个参数需拼接)
	 *
	 * @param url 链接
	 * @param params 参数(格式:key1=value1&key2=value2)
	 */
	public static String sendHttpGet(String url, String params) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpClient();
		return sendHttpGet(url, params, httpclient);
	}

	/**
	 * 发送HTTPS GET请求,支持多个参数(注:多个参数需拼接)
	 *
	 * @param url 链接
	 * @param params 参数(格式:key1=value1&key2=value2)
	 */
	public static String sendHttpsGet(String url, String params) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpsClient(url);
		return sendHttpGet(url, params, httpclient);
	}

	/**
	 * 发送HTTPS GET请求,不带参数(注:可将参数加在url后面)
	 *
	 * @param url 链接
	 */
	public static String sendHttpsGet(String url) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpsClient(url);
		try {
			return sendHttpGet(url, httpclient);
		} finally {
			httpclient.close();
		}
	}

	/**
	 * 发送HTTPS POST请求,支持带多个String参数
	 *
	 * @param url 链接
	 * @param paramMap 参数
	 */
	public static String sendHttpsPost(String url, Map<String, String> paramMap) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpsClient(url);
		return sendHttpPost(url, paramMap, httpclient);
	}

	/**
	 * 发送HTTPS POST请求,支持多个参数(注:多个参数需拼接)
	 *
	 * @param url 链接
	 * @param params 参数(格式:key1=value1&key2=value2)
	 */
	public static String sendHttpsPost(String url, String params) throws Exception {
		CloseableHttpClient httpclient = HttpClientUtils.getHttpsClient(url);
		if(params!=null&&!"".equals(params)){
			return sendHttpPost(url, params, httpclient);
		}
		return sendHttpGet(url, httpclient);
	}

	/**
	 * 发送HTTP GET请求
	 */
	private static String sendHttpGet(String url, String params, CloseableHttpClient httpclient) throws Exception {
		try {
			StringBuilder sb = new StringBuilder()
					.append(url)
					.append("?")
					.append(params);

			return sendHttpGet(sb.toString(), httpclient);
		} finally {
			httpclient.close();
		}
	}

	/**
	 * 发送HTTP POST请求
	 */
	private static String sendHttpPost(String url, Map<String, String> paramMap, CloseableHttpClient httpclient) throws Exception {
	    try {
	        HttpPost httpPost = new HttpPost(url);
	        List<NameValuePair> nvps = new ArrayList<NameValuePair>();

	        for (String key : paramMap.keySet()) {
	        	nvps.add(new BasicNameValuePair(key, paramMap.get(key)));
			}
	        httpPost.setEntity(new UrlEncodedFormEntity(nvps,Consts.UTF_8));
	        return sendHttpPost(httpPost, httpclient);
	    } finally {
	        httpclient.close();
	    }
	}

	/**
	 * 发送HTTP POST请求
	 */
	private static String sendHttpPost(String url, String params, CloseableHttpClient httpclient) throws Exception {
		try {
            HttpPost httpPost = new HttpPost(url);

            httpPost.setEntity(new StringEntity(params, Consts.UTF_8));

            return sendHttpPost(httpPost, httpclient);
        } finally {
            httpclient.close();
        }
	}

	/**
	 * 获取HttpClient
	 */
	private static CloseableHttpClient getHttpClient() {
		return HttpClients.createDefault();
	}

	/**
	 * 获取HTTPS HttpClient
	 */
	private static CloseableHttpClient getHttpsClient(String url) throws Exception {
		PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new URL(url));

        DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);

        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLHostnameVerifier(hostnameVerifier)
                .build();

		return httpclient;
	}

	/**
	 * 发送HTTP POST请求
	 */
	private static String sendHttpPost(HttpPost httpPost, CloseableHttpClient httpclient) throws Exception {
		httpPost.setConfig(requestConfig);
        CloseableHttpResponse response = httpclient.execute(httpPost);

        try {
            HttpEntity entity = response.getEntity();
            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("statusCode=="+statusCode);
            if (statusCode != HttpStatus.SC_OK) {
            	return "ERROR";
            }
            return EntityUtils.toString(entity, Consts.UTF_8);
        } finally {
            response.close();
        }
	}

	/**
	 * 发送HTTP GET请求
	 */
	private static String sendHttpGet(String url, CloseableHttpClient httpclient) throws Exception{
		HttpGet httpGet = new HttpGet(url);
		httpGet.setConfig(requestConfig);
		CloseableHttpResponse response = httpclient.execute(httpGet);

		try {
			HttpEntity entity = response.getEntity();
			int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("statusCode=="+statusCode);
            if (statusCode != HttpStatus.SC_OK) {
            	return "ERROR";
            }
			return EntityUtils.toString(entity, Consts.UTF_8);
		} finally {
			response.close();
		}
	}

	/**
	 * 发送HTTP GET请求
	 */
	private static byte[] sendHttpGetResByte(String url, CloseableHttpClient httpclient) throws Exception{
		HttpGet httpGet = new HttpGet(url);
		httpGet.setConfig(requestConfig);
		CloseableHttpResponse response = httpclient.execute(httpGet);

		try {
			HttpEntity entity = response.getEntity();

			return EntityUtils.toByteArray(entity);
		} finally {
			response.close();
		}
	}

}

请求方式 招商预算分布项目方式

	public String xxxpost(){
		String result = ERROR;
		try {
			Map<String, String> paramMap = new HashMap<String, String>();
			String empid = SessionUtil.getUser().getEmpId();
			String data = getParameter("data")==null?"":getParameter("data");
			String permission = getParameter("permission")==null?"":getParameter("permission");
			//String url = BmUtils.buildBmUpdateDireconn(empid);
			String url = "https://mp.csdn.net/";
			paramMap.put("data", data);
			paramMap.put("permissionData", permission);
			String responseStr = HttpClientUtils.sendHttpPost(url, paramMap);
			System.out.println("resposeStr===="+responseStr);
			if(responseStr!=null&&!"ERROR".equals(responseStr)){
                resultMap = new HashMap<String,Object>();				
                resultMap= JsonUtil.read(responseStr, Map.class);
                result = SUCCESS;
			}
		} catch (Exception e) {
			result = ERROR;
			e.printStackTrace();
		}
		return result;
	}

	public String xxxget(){
		String result = ERROR;
		try {
			String empid= SessionUtil.getUser().getEmpId();
			//String url = BmUtils.buildBmDireconnByPmkyPmcd(empid);
			String url = "https://mp.csdn.net/?empid="+empid;
			String responseStr = HttpClientUtils.sendHttpGet(url);
			responseStr = responseStr.replaceAll("null", "\"\"");
			if(responseStr!=null&&!"ERROR".equals(responseStr)){
				resultMap= JsonUtil.read(responseStr, Map.class);
				result = SUCCESS;	
			}
		} catch (Exception e) {
			logger.error("xxxxxx", e);
			e.printStackTrace();
			result = ERROR;
		}
		return result;
	}
	

3、HTTP状态码

HTML接口使用的是HTTP协议,HTTP协议常用的状态码如下:

以下内容来自:https://support.google.com/webmasters/answer/40132#

如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。

此状态代码提供该请求状态的相关信息,并向 Googlebot 提供有关您网站和请求的网页的信息。

一些常见的状态代码为:

200 - 服务器成功返回网页
404 - 请求的网页不存在
503 - 服务器暂时不可用
以下提供了 HTTP 状态代码的完整列表。您还可以访问有关 HTTP 状态代码的 W3C 网页,了解详细信息。

1xx(临时响应)
用于表示临时响应并需要请求者执行操作才能继续的状态代码。

代码说明
100(继续)请求者应继续进行请求。服务器返回此代码以表示,服务器已收到某项请求的第一部分,正等待接收剩余部分。
101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换。

2xx(成功)

用于表示服务器已成功处理相应请求的状态代码。

代码说明
200(成功)服务器成功处理了相应请求。通常,这表示服务器已提供了请求的网页。如果您的 robots.txt 文件显示为此状态,则表示 Googlebot 已成功检索到该文件。
201(已创建)请求成功且服务器已创建了新的资源。
202(已接受)服务器已接受相应请求,但尚未对其进行处理。
203(非授权信息)服务器已成功处理相应请求,但返回了可能来自另一来源的信息。
204(无内容)服务器已成功处理相应请求,但未返回任何内容。
205(重置内容)服务器已成功处理相应请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。
206(部分内容)服务器成功处理了部分 GET 请求。

3xx(已重定向)
您需要进一步操作才能完成请求。此类状态代码通常可用于重定向。Google 建议您针对每一请求使用重定向的次数少于五次。您可以使用网站站长工具确定 Googlebot 是否会在抓取重定向网页时遇到问题。抓取下的抓取错误页列出了由于重定向错误而导致 Googlebot 无法抓取的网址。

代码说明
300(多种选择)服务器可以根据请求来执行多项操作,例如:按照请求者(用户代理)的要求来选择某项操作或者展示列表以便请求者选择其中某项操作。
301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 Googlebot 某个网页或网站已被永久移动到新位置。
302(临时移动)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 Googlebot 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 Googlebot 某个页面或网站已被移动。
303(查看其他位置)当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。
304(未修改)

请求的网页自上次请求后再也没有修改过。当服务器返回此响应时,不会返回相关网页的内容。

如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。

305(使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。
307(临时重定向) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 Googlebot 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 Googlebot 某个页面或网站已被移动。
4xx(请求错误)
此类状态代码表示,相应请求可能出错,已阻止了服务器对请求的处理。

代码说明
400(错误请求)服务器不理解相应请求的语法。
401(未授权)请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。
403(已禁止)服务器正在拒绝相应请求。如果 Googlebot 在尝试抓取网站的有效网页时收到此状态代码(您可在 Google 网站站长工具中运行状况下的抓取错误页上进行查看),则可能是因为您的服务器或主机正在阻止 Googlebot 进行访问。
404(未找到)服务器找不到请求的网页。例如,如果相应请求是针对服务器上不存在的网页进行的,那么服务器通常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在 Google 网站站长工具中的已拦截的网址页上看到此状态,那么这就是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。如果您在 Googlebot 尝试抓取的网址上看到此状态,那么这表示 Googlebot 追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。
405(方法禁用)禁用相应请求中所指定的方法。
406(不接受)无法使用相应请求的内容特性来响应请求的网页。
407(需要代理授权)此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。
408(请求超时)服务器在等待请求时超时。
409(冲突)服务器在完成请求时遇到冲突。服务器必须在响应中包含该冲突的相关信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。
410(已删除)如果请求的资源已被永久删除,那么服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已永久删除,您应使用 301 指定资源的新位置。
411(需要有效长度)服务器不会接受包含无效内容长度标头字段的请求。
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大)服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力。
414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法进行处理。
415(不支持的媒体类型)相应请求的格式不受请求页面的支持。
416(请求范围不符合要求)如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码。
417(未满足期望值)服务器未满足“期望”请求标头字段的要求。

5xx(服务器错误)

此类状态代码表示,服务器在尝试处理相应请求时发生内部错误。此类错误往往与服务器本身有关(与请求无关)。

代码说明
500(服务器内部错误)服务器遇到错误,无法完成相应请求。
501(尚未实施)服务器不具备完成相应请求的功能。例如,当服务器无法识别请求方法时,可能便会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到了无效的响应。
503(服务不可用)目前无法使用服务器(由于超载或进行停机维护)。通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,未及时从上游服务器接收请求。
505(HTTP 版本不受支持)服务器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值