最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 發(fā)送http請(qǐng)求(get、post)的示例

 更新時(shí)間:2020年10月24日 10:04:16   作者:Marydon  
這篇文章主要介紹了Java 發(fā)送http請(qǐng)求的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

1.情景展示

  java發(fā)送get請(qǐng)求、post請(qǐng)求(form表單、json數(shù)據(jù))至另一服務(wù)器;

  可設(shè)置HTTP請(qǐng)求頭部信息,可以接收服務(wù)器返回cookie信息,可以上傳文件等; 

2.代碼實(shí)現(xiàn)

所需jar包:httpcore-4.4.1.jar;httpclient-4.4.1.jar;httpmime-4.4.1.jar;epoint-utils-9.3.3.jar

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPatch;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
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.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import com.epoint.core.utils.string.StringUtil;
/**
 * HttpClient工具類,使用http-client包實(shí)現(xiàn),原先的common-httpclient已經(jīng)淘汰
 *
 * @作者 ko
 * @version [版本號(hào), 2017年10月18日]
 */
public class HttpUtil
{
    private static PoolingHttpClientConnectionManager connMgr;
    private static RequestConfig requestConfig;
    private static final int MAX_TIMEOUT = 7000;
 
    /**
     * 直接以流返回
     */
    public static final int RTN_TYPE_1 = 1;
    /**
     * 直接以string返回
     */
    public static final int RTN_TYPE_2 = 2;
    /**
     * 以map返回,reslut:接口結(jié)果string;statusCode:http狀態(tài)碼
     */
    public static final int RTN_TYPE_3 = 3;
    /**
     * 以map返回,reslut:接口結(jié)果string;statusCode:http狀態(tài)碼;cookie:response的cookie
     * cookie值鍵值對(duì),格式 key1=value1;key2=value2;...
     */
    public static final int RTN_TYPE_4 = 4;
    /**
     * 默認(rèn)上傳文件的文件流或file 的key Name
     */
    private static final String DEFAULT_BINARYBODY_KEYNAME = "file";
 
    static {
        // 設(shè)置連接池
        connMgr = new PoolingHttpClientConnectionManager();
        // 設(shè)置連接池大小
        connMgr.setMaxTotal(100);
        connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
        // 在提交請(qǐng)求之前 測(cè)試連接是否可用
        connMgr.setValidateAfterInactivity(1);
 
        RequestConfig.Builder configBuilder = RequestConfig.custom();
        // 設(shè)置連接超時(shí)
        configBuilder.setConnectTimeout(MAX_TIMEOUT);
        // 設(shè)置讀取超時(shí)
        configBuilder.setSocketTimeout(MAX_TIMEOUT);
        // 設(shè)置從連接池獲取連接實(shí)例的超時(shí)
        configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
        requestConfig = configBuilder.build();
    }
 
    /**
     * 發(fā)送 GET請(qǐng)求
     *
     * @param apiUrl
     *            API接口URL
     * @return String 響應(yīng)內(nèi)容
     */
    public static String doGet(String apiUrl) {
        return doHttp(apiUrl, null, "get", RTN_TYPE_2);
    }
 
    /**
     * 發(fā)送POST請(qǐng)求
     *
     * @param apiUrl
     *            API接口URL
     * @param params
     *            K-V參數(shù)
     * @return String 響應(yīng)內(nèi)容
     */
    public static String doPost(String apiUrl, Map<String, Object> params) {
        return doHttp(apiUrl, params, "post", RTN_TYPE_2);
    }
 
    /**
     * 發(fā)送POST請(qǐng)求
     *
     * @param apiUrl
     *            API接口URL
     * @param json
     *            json參數(shù)
     * @return String 響應(yīng)內(nèi)容
     */
    public static String doPostJson(String apiUrl, String json) {
        return doHttp(apiUrl, json, "post", RTN_TYPE_2);
    }
 
    /**
     * 發(fā)送 http 請(qǐng)求
     *
     * @param apiUrl
     *            API接口URL
     * @param params
     *            {Map<String, Object> K-V形式、json字符串}
     * @param method
     *            {null、或者post:POST請(qǐng)求、patch:PATCH請(qǐng)求、delete:DELETE請(qǐng)求、get:GET請(qǐng)求}
     * @param type
     *            {HttpUtil.RTN_TYPE_1:請(qǐng)求返回stream(此時(shí)流需要在外部手動(dòng)關(guān)閉);HttpUtil.
     *            RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式)以及http狀態(tài)碼;HttpUtil.RTN_TYPE_4:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式), http狀態(tài)碼和cookie;其他情況返回string}
     *            如果結(jié)果是個(gè)map,key為:result,statusCode,cookie,分別返回 結(jié)果
     *            string,http狀態(tài)碼,cookie; cookie值鍵值對(duì),格式
     *            key1=value1;key2=value2;...
     * @return stream或 string 或 map
     */
    public static <T> T doHttp(String apiUrl, Object params, String method, int type) {
        return doHttp(apiUrl, null, params, method, type);
    }
 
    /**
     * 發(fā)送 http 請(qǐng)求
     *
     * @param apiUrl
     *            API接口URL
     * @param headerMap
     *            header信息Map<String, String>,可設(shè)置cookie
     * @param params
     *            {Map<String, Object> K-V形式、json字符串}
     * @param method
     *            {null、或者post:POST請(qǐng)求、patch:PATCH請(qǐng)求、delete:DELETE請(qǐng)求、get:GET請(qǐng)求}
     * @param type
     *            {HttpUtil.RTN_TYPE_1:請(qǐng)求返回stream(此時(shí)流需要在外部手動(dòng)關(guān)閉);HttpUtil.
     *            RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式)以及http狀態(tài)碼;HttpUtil.RTN_TYPE_4:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式), http狀態(tài)碼和cookie;其他情況返回string}
     *            如果結(jié)果是個(gè)map,key為:result,statusCode,cookie,分別返回 結(jié)果
     *            string,http狀態(tài)碼,cookie; cookie值鍵值對(duì),格式
     *            key1=value1;key2=value2;...
     * @return stream或 string 或 map
     */
    public static <T> T doHttp(String apiUrl, Map<String, String> headerMap, Object params, String method, int type) {
        CloseableHttpClient httpClient = null;
        if (isSSL(apiUrl)) {
            httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
                    .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
        }
        else {
            httpClient = HttpClients.createDefault();
        }
        return doHttp(httpClient, apiUrl, headerMap, params, method, type);
    }
 
    /**
     * 發(fā)送 http 請(qǐng)求
     *
     * @param httpClient
     *            httpclient對(duì)象 由外部傳入,用戶 需要保持登錄狀態(tài)等情況 此時(shí)如果要ssl,那么要在外部加入ssl特性
     *            httpClient =
     *            HttpClients.custom().setSSLSocketFactory(HttpUtil.
     *            createSSLConnSocketFactory())
     *            .setConnectionManager(HttpUtil.getConnMgr()).
     *            setDefaultRequestConfig(HttpUtil..getRequestConfig()).build();
     * @param apiUrl
     *            API接口URL
     * @param headerMap
     *            header信息Map<String, String>,可設(shè)置cookie
     *
     * @param params
     *            {Map<String, Object> K-V形式、json字符串}
     * @param method
     *            {null、或者post:POST請(qǐng)求、patch:PATCH請(qǐng)求、delete:DELETE請(qǐng)求、get:GET請(qǐng)求}
     * @param type
     *            {HttpUtil.RTN_TYPE_1:請(qǐng)求返回stream(此時(shí)流需要在外部手動(dòng)關(guān)閉);HttpUtil.
     *            RTN_TYPE_2:string;HttpUtil.RTN_TYPE_3:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式)以及http狀態(tài)碼;HttpUtil.RTN_TYPE_4:返回一個(gè)map,map包含結(jié)果(
     *            結(jié)果是string形式), http狀態(tài)碼和cookie;其他情況返回string}
     *            如果結(jié)果是個(gè)map,key為:result,statusCode,cookie,分別返回 結(jié)果
     *            string,http狀態(tài)碼,cookie; cookie值鍵值對(duì),格式
     *            key1=value1;key2=value2;...
     * @return stream或 string 或 map
     */
    @SuppressWarnings("unchecked")
    public static <T> T doHttp(CloseableHttpClient httpClient, String apiUrl, Map<String, String> headerMap,
            Object params, String method, int type) {
        HttpRequestBase httpPost = null;
        if (StringUtil.isNotBlank(method)) {
            if ("patch".equalsIgnoreCase(method)) {
                httpPost = new HttpPatch(apiUrl);
            }
            else if ("delete".equalsIgnoreCase(method)) {
                httpPost = new HttpDelete(apiUrl);
            }
            else if ("get".equalsIgnoreCase(method)) {
                httpPost = new HttpGet(apiUrl);
            }
            else if ("post".equalsIgnoreCase(method)) {
                httpPost = new HttpPost(apiUrl);
            }
        }
        else {
            httpPost = new HttpPost(apiUrl);
        }
        CloseableHttpResponse response = null;
 
        try {
            // 設(shè)置header信息
            if (headerMap != null && !headerMap.isEmpty()) {
                for (Map.Entry<String, String> entry : headerMap.entrySet()) {
                    httpPost.addHeader(entry.getKey(), entry.getValue());
                }
            }
            if (isSSL(apiUrl)) {
                httpPost.setConfig(requestConfig);
            }
            // 參數(shù)不為null、要處理參數(shù)
            if (params != null) {
                // get請(qǐng)求拼接在url后面
                if (httpPost instanceof HttpGet) {
                    StringBuffer param = new StringBuffer();
                    if (params instanceof Map) {
                        Map<String, Object> paramsConvert = (Map<String, Object>) params;
                        int i = 0;
                        for (String key : paramsConvert.keySet()) {
                            if (i == 0)
                                param.append("?");
                            else
                                param.append("&");
                            param.append(key).append("=").append(paramsConvert.get(key));
                            i++;
                        }
                    }
                    else {
                        param.append("?" + params.toString());
                    }
                    apiUrl += param;
                }
                // delete請(qǐng)求暫不處理
                else if (!(httpPost instanceof HttpDelete)) {
                    // K-V形式
                    if (params instanceof Map) {
                        Map<String, Object> paramsConvert = (Map<String, Object>) params;
 
                        List<NameValuePair> pairList = new ArrayList<>(paramsConvert.size());
                        for (Map.Entry<String, Object> entry : paramsConvert.entrySet()) {
                            NameValuePair pair = new BasicNameValuePair(entry.getKey(),
                                    entry.getValue() == null ? "" : entry.getValue().toString());
                            pairList.add(pair);
                        }
                        ((HttpEntityEnclosingRequestBase) httpPost)
                                .setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
                    }
                    // json格式
                    else {
                        StringEntity stringEntity = new StringEntity(params.toString(), "UTF-8");
                        stringEntity.setContentEncoding("UTF-8");
                        stringEntity.setContentType("application/json");
                        ((HttpEntityEnclosingRequestBase) httpPost).setEntity(stringEntity);
                    }
                }
            }
            response = httpClient.execute(httpPost);
            // int statusCode = response.getStatusLine().getStatusCode();
            // if (statusCode != HttpStatus.SC_OK) {
            // return null;
            // }
 
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                if (type == RTN_TYPE_1) {
                    return (T) entity.getContent();
                }
                else if (RTN_TYPE_2 == type) {
                    return (T) EntityUtils.toString(entity, "UTF-8");
                }
                else if (RTN_TYPE_3 == type || RTN_TYPE_4 == type) {
                    Map<String, String> rtnMap = new HashMap<String, String>();
                    rtnMap.put("result", EntityUtils.toString(entity, "UTF-8"));
                    rtnMap.put("statusCode", response.getStatusLine().getStatusCode() + "");
                    if (RTN_TYPE_4 == type) {
                        rtnMap.put("cookie", getCookie(response));
                    }
                    return (T) rtnMap;
                }
                else {
                    return (T) EntityUtils.toString(entity, "UTF-8");
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (response != null && type != RTN_TYPE_1) {
                try {
                    EntityUtils.consume(response.getEntity());
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param file
     *            可以選擇本地文件上傳;如果傳了file,又傳了fileName,那么文件名以fileName為準(zhǔn),否則 是file的文件名
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    public static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, File file,
            String fileName, boolean ssl) {
        return upload(url, headerMap, paramMap, file, null, fileName, ssl);
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param in
     *            文件流
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    public static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, InputStream in,
            String fileName, boolean ssl) {
        return upload(url, headerMap, paramMap, null, in, fileName, ssl);
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param httpClient
     *            外部傳入httpClient
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param file
     *            可以選擇本地文件上傳;如果傳了file,又傳了fileName,那么文件名以fileName為準(zhǔn),否則 是file的文件名
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    public static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap,
            Map<String, String> paramMap, File file, String fileName, boolean ssl) {
        return upload(httpClient, url, headerMap, paramMap, file, null, fileName, ssl);
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param httpClient
     *            外部傳入httpClient
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param in
     *            文件流
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    public static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap,
            Map<String, String> paramMap, InputStream in, String fileName, boolean ssl) {
        return upload(httpClient, url, headerMap, paramMap, null, in, fileName, ssl);
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param file
     *            可以選擇本地文件上傳,file,in互斥;如果傳了file,又傳了fileName,那么文件名以fileName為準(zhǔn),否則
     *            是file的文件名
     * @param in
     *            文件流
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    private static String upload(String url, Map<String, String> headerMap, Map<String, String> paramMap, File file,
            InputStream in, String fileName, boolean ssl) {
        CloseableHttpClient httpClient = null;
        if (ssl) {
            httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
                    .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
        }
        else {
            httpClient = HttpClients.createDefault();
        }
        return upload(httpClient, url, headerMap, paramMap, file, in, fileName, ssl);
    }
 
    /**
     * 上傳附件(post形式)
     *
     * @param httpClient
     *            外部傳入httpClient
     * @param url
     *            請(qǐng)求地址
     * @param headerMap
     *            header參數(shù)map Map<String, String>
     * @param paramMap
     *            額外的參數(shù)map,Map<String, String>
     * @param file
     *            可以選擇本地文件上傳,file,in互斥;如果傳了file,又傳了fileName,那么文件名以fileName為準(zhǔn),否則
     *            是file的文件名
     * @param in
     *            文件流
     * @param fileName
     *            以流傳輸時(shí),必須指定文件名
     * @param ssl
     *            是否需要ssl
     * @return result,返回上傳結(jié)果,如果接口沒有返回值,則為狀態(tài)碼
     */
    private static String upload(CloseableHttpClient httpClient, String url, Map<String, String> headerMap,
            Map<String, String> paramMap, File file, InputStream in, String fileName, boolean ssl) {
        String result = "";
        CloseableHttpResponse response = null;
        try {
            HttpPost httpPost = new HttpPost(url);
            // 設(shè)置header信息
            if (headerMap != null && !headerMap.isEmpty()) {
                for (Map.Entry<String, String> entry : headerMap.entrySet()) {
                    httpPost.addHeader(entry.getKey(), entry.getValue());
                }
            }
            if (ssl) {
                httpPost.setConfig(requestConfig);
            }
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            // 選擇以file形式上傳
            if (file != null && file.exists()) {
                if (StringUtil.isNotBlank(fileName)) {
                    builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, file, ContentType.DEFAULT_BINARY, fileName);
                }
                else {
                    builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, file);
                }
            }
            // 以流上傳
            else if (in != null && StringUtil.isNotBlank(fileName)) {
                builder.addBinaryBody(DEFAULT_BINARYBODY_KEYNAME, in, ContentType.DEFAULT_BINARY, fileName);
            }
            if (paramMap != null && !paramMap.isEmpty()) {
                for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                    builder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.TEXT_PLAIN));
                }
            }
            HttpEntity reqEntity = builder.build();
            httpPost.setEntity(reqEntity);
 
            response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                result = EntityUtils.toString(entity, "UTF-8");
            }
            else {
                result = response.getStatusLine().getStatusCode() + "";
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (response != null) {
                try {
                    EntityUtils.consume(response.getEntity());
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
 
    private static String getCookie(HttpResponse httpResponse) {
        Map<String, String> cookieMap = new HashMap<String, String>(64);
        Header headers[] = httpResponse.getHeaders("Set-Cookie");
        if (headers == null || headers.length == 0) {
            return null;
        }
        String cookie = "";
        for (int i = 0; i < headers.length; i++) {
            cookie += headers[i].getValue();
            if (i != headers.length - 1) {
                cookie += ";";
            }
        }
        String cookies[] = cookie.split(";");
        for (String c : cookies) {
            c = c.trim();
            if (cookieMap.containsKey(c.split("=")[0])) {
                cookieMap.remove(c.split("=")[0]);
            }
            cookieMap.put(c.split("=")[0],
                    c.split("=").length == 1 ? "" : (c.split("=").length == 2 ? c.split("=")[1] : c.split("=", 2)[1]));
        }
        String cookiesTmp = "";
        for (String key : cookieMap.keySet()) {
            cookiesTmp += key + "=" + cookieMap.get(key) + ";";
        }
        return cookiesTmp.substring(0, cookiesTmp.length() - 2);
    }
 
    /**
     * 創(chuàng)建SSL安全連接
     *
     * @return
     */
    public static SSLConnectionSocketFactory createSSLConnSocketFactory() {
        SSLConnectionSocketFactory sslsf = null;
        try {
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy()
            {
 
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    return true;
                }
            }).build();
            sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier()
            {
 
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            });
        }
        catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        return sslsf;
    }
 
    public static PoolingHttpClientConnectionManager getConnMgr() {
        return connMgr;
    }
 
    public static RequestConfig getRequestConfig() {
        return requestConfig;
    }
 
    private static boolean isSSL(String apiUrl) {
        if (apiUrl.indexOf("https") != -1 ) {
            return true;
        }
        else {
            return false;
        }
    }
 
}

以上就是Java 發(fā)送http請(qǐng)求(get、post)的示例的詳細(xì)內(nèi)容,更多關(guān)于Java 發(fā)送http請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的Vector和Stack底層源碼分析

    Java中的Vector和Stack底層源碼分析

    這篇文章主要介紹了Java中的Vector和Stack底層源碼分析,Stack繼承了Vector,Vector底層還是一個(gè)List,也就是基于數(shù)組來實(shí)現(xiàn)的,所以ArrayList有的優(yōu)點(diǎn),比如獲取元素的速度快,隨機(jī)讀,它都有,需要的朋友可以參考下
    2023-12-12
  • 深入理解Java反射

    深入理解Java反射

    在理解反射原理之前先要搞清類型信息。接下來通過本文給大家介紹java反射的深入理解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • Java 添加、更新和移除PDF超鏈接的實(shí)現(xiàn)方法

    Java 添加、更新和移除PDF超鏈接的實(shí)現(xiàn)方法

    PDF超鏈接用一個(gè)簡(jiǎn)單的鏈接包含了大量的信息,滿足了人們?cè)诓徽加锰嗫臻g的情況下渲染外部信息的需求。這篇文章主要介紹了Java 添加、更新和移除PDF超鏈接的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-05-05
  • IDEA如何將右下角提示框禁止彈出問題

    IDEA如何將右下角提示框禁止彈出問題

    這篇文章主要介紹了IDEA如何將右下角提示框禁止彈出問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring事務(wù)失效的原因及解決方案

    Spring事務(wù)失效的原因及解決方案

    本文主要介紹了Spring事務(wù)失效的原因及解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java8中List轉(zhuǎn)Map的多種方式代碼

    Java8中List轉(zhuǎn)Map的多種方式代碼

    這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)Map的多種方式,在實(shí)際項(xiàng)目中我們經(jīng)常會(huì)用到List轉(zhuǎn)Map操作,本文介紹了多種方法的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • Java Validation Api如何實(shí)現(xiàn)自定義注解

    Java Validation Api如何實(shí)現(xiàn)自定義注解

    這篇文章主要介紹了Java Validation Api如何實(shí)現(xiàn)自定義注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)方法

    JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面,需要的朋友可以參考下
    2023-07-07
  • 學(xué)習(xí)Java中的List集合

    學(xué)習(xí)Java中的List集合

    這篇文章主要介紹了學(xué)習(xí)Java中的List集合,List是一個(gè)有序集合, 說是集合,其實(shí)只是只是Collection接口的一個(gè)子接口,下面關(guān)于List的相關(guān)資料 需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • 使用指定的JDK啟動(dòng)IDEA的三種方法

    使用指定的JDK啟動(dòng)IDEA的三種方法

    今天小編就為大家分享一篇關(guān)于使用指定的JDK啟動(dòng)IDEA的三種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評(píng)論

文化| 铜川市| 额济纳旗| 邢台县| 格尔木市| 准格尔旗| 略阳县| 阿拉善右旗| 甘谷县| 武汉市| 邛崃市| 炉霍县| 潞西市| 剑阁县| 惠来县| 尉犁县| 隆化县| 德清县| 安图县| 广平县| 泊头市| 蓝田县| 仙桃市| 苍南县| 本溪| 无极县| 宜君县| 资源县| 琼海市| 砀山县| 噶尔县| 凤翔县| 栖霞市| 峨山| 托里县| 凤庆县| 兰考县| 巴里| 古浪县| 阳谷县| 昌宁县|