欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA發(fā)送HTTP請求的多種方式詳細(xì)總結(jié)

 更新時間:2023年01月30日 16:15:57   作者:流云一號  
目前做項目中有一個需求是這樣的,需要通過Java發(fā)送url請求,查看該url是否有效,這時我們可以通過獲取狀態(tài)碼來判斷,下面這篇文章主要給大家介紹了關(guān)于JAVA發(fā)送HTTP請求的多種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下

程序員日常工作中,發(fā)送http請求特別常見。本文以Java為例,總結(jié)發(fā)送http請求的多種方式。

1. HttpURLConnection

使用JDK原生提供的net,無需其他jar包,代碼如下:

import com.alibaba.fastjson.JSON;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest1 {
 
    public static void main(String[] args) {
        HttpURLConnection con = null;
 
        BufferedReader buffer = null;
        StringBuffer resultBuffer = null;
 
        try {
            URL url = new URL("http://10.30.10.151:8012/gateway.do");
            //得到連接對象
            con = (HttpURLConnection) url.openConnection();
            //設(shè)置請求類型
            con.setRequestMethod("POST");
            //設(shè)置Content-Type,此處根據(jù)實際情況確定
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //允許寫出
            con.setDoOutput(true);
            //允許讀入
            con.setDoInput(true);
            //不使用緩存
            con.setUseCaches(false);
            OutputStream os = con.getOutputStream();
            Map paraMap = new HashMap();
            paraMap.put("type", "wx");
            paraMap.put("mchid", "10101");
            //組裝入?yún)?
            os.write(("consumerAppId=test&serviceName=queryMerchantService&params=" + JSON.toJSONString(paraMap)).getBytes());
            //得到響應(yīng)碼
            int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                //得到響應(yīng)流
                InputStream inputStream = con.getInputStream();
                //將響應(yīng)流轉(zhuǎn)換成字符串
                resultBuffer = new StringBuffer();
                String line;
                buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
                while ((line = buffer.readLine()) != null) {
                    resultBuffer.append(line);
                }
                System.out.println("result:" + resultBuffer.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. HttpClient

需要用到commons-httpclient-3.1.jar,maven依賴如下:

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

代碼如下:

import com.alibaba.fastjson.JSON;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest2 {
 
    public static void main(String[] args) {
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod("http://10.30.10.151:8012/gateway.do");
 
        postMethod.addRequestHeader("accept", "*/*");
        //設(shè)置Content-Type,此處根據(jù)實際情況確定
        postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //必須設(shè)置下面這個Header
        //添加請求參數(shù)
        Map paraMap = new HashMap();
        paraMap.put("type", "wx");
        paraMap.put("mchid", "10101");
        postMethod.addParameter("consumerAppId", "test");
        postMethod.addParameter("serviceName", "queryMerchantService");
        postMethod.addParameter("params", JSON.toJSONString(paraMap));
        String result = "";
        try {
            int code = httpClient.executeMethod(postMethod);
            if (code == 200){
                result = postMethod.getResponseBodyAsString();
                System.out.println("result:" + result);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. CloseableHttpClient

需要用到httpclient-4.5.6.jar,maven依賴如下: 

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

代碼如下:

import com.alibaba.fastjson.JSON;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
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.HttpPost;
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;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class HttpTest3 {
 
    public static void main(String[] args) {
        int timeout = 120000;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(timeout)
                .setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
        HttpPost httpPost = null;
        List<NameValuePair> nvps = null;
        CloseableHttpResponse responses = null;// 命名沖突,換一個名字,response
        HttpEntity resEntity = null;
        String result;
        try {
            httpPost = new HttpPost("http://10.30.10.151:8012/gateway.do");
            httpPost.setConfig(defaultRequestConfig);
 
            Map paraMap = new HashMap();
            paraMap.put("type", "wx");
            paraMap.put("mchid", "10101");
            nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("consumerAppId", "test"));
            nvps.add(new BasicNameValuePair("serviceName", "queryMerchantService"));
            nvps.add(new BasicNameValuePair("params", JSON.toJSONString(paraMap)));
            httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
 
            responses = httpClient.execute(httpPost);
            resEntity = responses.getEntity();
            result = EntityUtils.toString(resEntity, Consts.UTF_8);
            EntityUtils.consume(resEntity);
            System.out.println("result:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                responses.close();
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4. okhttp

需要用到okhttp-3.10.0.jar,maven依賴如下:

<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>3.10.0</version>
</dependency>

代碼如下:

import com.alibaba.fastjson.JSON;
import okhttp3.*;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest4 {
 
    public static void main(String[] args) throws IOException {
        String url = "http://10.30.10.151:8012/gateway.do";
        OkHttpClient client = new OkHttpClient();
        Map paraMap = new HashMap();
        paraMap.put("yybh", "1231231");
 
        RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("consumerAppId", "tst")
                .addFormDataPart("serviceName", "queryCipher")
                .addFormDataPart("params", JSON.toJSONString(paraMap))
                .build();
 
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();
        Response response = client
                .newCall(request)
                .execute();
        if (response.isSuccessful()) {
            System.out.println("result:" + response.body().string());
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }
}

5. Socket

使用JDK原生提供的net,無需其他jar包

此處參考:https://www.cnblogs.com/hehongtao/p/5276425.html

代碼如下:

import com.alibaba.fastjson.JSON;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest6 {
 
    private static String encoding = "utf-8";
 
    public static void main(String[] args) {
        try {
            Map paraMap = new HashMap();
            paraMap.put("yybh", "12312311");
            String data = URLEncoder.encode("consumerAppId", "utf-8") + "=" + URLEncoder.encode("test", "utf-8") + "&" +
                    URLEncoder.encode("serviceName", "utf-8") + "=" + URLEncoder.encode("queryCipher", "utf-8")
                    + "&" +
                    URLEncoder.encode("params", "utf-8") + "=" + URLEncoder.encode(JSON.toJSONString(paraMap), "utf-8");
            Socket s = new Socket("10.30.10.151", 8012);
            OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
            StringBuffer sb = new StringBuffer();
            sb.append("POST /gateway.do HTTP/1.1\r\n");
            sb.append("Host: 10.30.10.151:8012\r\n");
            sb.append("Content-Length: " + data.length() + "\r\n");
            sb.append("Content-Type: application/x-www-form-urlencoded\r\n");
            //注,這里很關(guān)鍵。這里一定要一個回車換行,表示消息頭完,不然服務(wù)器會等待
            sb.append("\r\n");
            osw.write(sb.toString());
            osw.write(data);
            osw.write("\r\n");
            osw.flush();
 
            //--輸出服務(wù)器傳回的消息的頭信息
            InputStream is = s.getInputStream();
            String line = null;
            int contentLength = 0;//服務(wù)器發(fā)送回來的消息長度
            // 讀取所有服務(wù)器發(fā)送過來的請求參數(shù)頭部信息
            do {
                line = readLine(is, 0);
                //如果有Content-Length消息頭時取出
                if (line.startsWith("Content-Length")) {
                    contentLength = Integer.parseInt(line.split(":")[1].trim());
                }
                //打印請求部信息
                System.out.print(line);
                //如果遇到了一個單獨的回車換行,則表示請求頭結(jié)束
            } while (!line.equals("\r\n"));
 
            //--輸消息的體
            System.out.print(readLine(is, contentLength));
 
            //關(guān)閉流
            is.close();
 
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /*
     * 這里我們自己模擬讀取一行,因為如果使用API中的BufferedReader時,它是讀取到一個回車換行后
     * 才返回,否則如果沒有讀取,則一直阻塞,直接服務(wù)器超時自動關(guān)閉為止,如果此時還使用BufferedReader
     * 來讀時,因為讀到最后一行時,最后一行后不會有回車換行符,所以就會等待。如果使用服務(wù)器發(fā)送回來的
     * 消息頭里的Content-Length來截取消息體,這樣就不會阻塞
     *
     * contentLe 參數(shù) 如果為0時,表示讀頭,讀時我們還是一行一行的返回;如果不為0,表示讀消息體,
     * 時我們根據(jù)消息體的長度來讀完消息體后,客戶端自動關(guān)閉流,這樣不用先到服務(wù)器超時來關(guān)閉。
     */
    private static String readLine(InputStream is, int contentLe) throws IOException {
        ArrayList lineByteList = new ArrayList();
        byte readByte;
        int total = 0;
        if (contentLe != 0) {
            do {
                readByte = (byte) is.read();
                lineByteList.add(Byte.valueOf(readByte));
                total++;
            } while (total < contentLe);//消息體讀還未讀完
        } else {
            do {
                readByte = (byte) is.read();
                lineByteList.add(Byte.valueOf(readByte));
            } while (readByte != 10);
        }
 
        byte[] tmpByteArr = new byte[lineByteList.size()];
        for (int i = 0; i < lineByteList.size(); i++) {
            tmpByteArr[i] = ((Byte) lineByteList.get(i)).byteValue();
        }
        lineByteList.clear();
 
        return new String(tmpByteArr, encoding);
    }
}

6. RestTemplate

RestTemplate 是由Spring提供的一個HTTP請求工具。比傳統(tǒng)的Apache和HttpCLient便捷許多,能夠大大提高客戶端的編寫效率。代碼如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class RestTemplateConfig {
 
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        return factory;
    }
}
 
 
@Autowired
RestTemplate restTemplate;
 
@Test
public void postTest() throws Exception {
    MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();
    Map paraMap = new HashMap();
    paraMap.put("type", "wx");
    paraMap.put("mchid", "10101");
    requestEntity.add("consumerAppId", "test");
    requestEntity.add("serviceName", "queryMerchant");
    requestEntity.add("params", JSON.toJSONString(paraMap));
    RestTemplate restTemplate = new RestTemplate();
    System.out.println(restTemplate.postForObject("http://10.30.10.151:8012/gateway.do",         requestEntity, String.class));
}

總結(jié)

到此這篇關(guān)于JAVA發(fā)送HTTP請求的多種方式的文章就介紹到這了,更多相關(guān)JAVA發(fā)送HTTP請求方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot使用自定義注解做AOP的案例代碼

    spring boot使用自定義注解做AOP的案例代碼

    這篇文章主要介紹了spring boot使用自定義注解做AOP的案例代碼,代碼簡單易懂,通過創(chuàng)建一個自定注解,接收一個傳值type,感興趣的朋友一起看看吧
    2024-06-06
  • springboot的SpringPropertyAction事務(wù)屬性源碼解讀

    springboot的SpringPropertyAction事務(wù)屬性源碼解讀

    這篇文章主要介紹了springboot的SpringPropertyAction事務(wù)屬性源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 刪除JAVA集合中元素的實現(xiàn)代碼

    刪除JAVA集合中元素的實現(xiàn)代碼

    有時候我們要刪除集合中的某些元素,那么就可以參考下面的代碼
    2013-07-07
  • 詳解SpringBoot配置連接池

    詳解SpringBoot配置連接池

    本篇文章主要詳解SpringBoot配置連接池,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Spring實現(xiàn)文件上傳的配置詳解

    Spring實現(xiàn)文件上傳的配置詳解

    這篇文章將為大家詳細(xì)說明一下spring上傳文件如何配置,以及從request請求中解析到文件流的原理,文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • Spring?Data?Exists查詢最佳方法編寫示例

    Spring?Data?Exists查詢最佳方法編寫示例

    這篇文章主要為大家介紹了Spring?Data?Exists查詢最佳方法編寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java實現(xiàn)文件上傳和下載

    java實現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java游戲開發(fā)之俄羅斯方塊的實現(xiàn)

    Java游戲開發(fā)之俄羅斯方塊的實現(xiàn)

    俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計和編程的益智類視頻游戲。本文和大家分享了利用Java語言實現(xiàn)這一經(jīng)典的小游戲的示例代碼,需要的可以參考一下
    2022-05-05
  • Java中生成微信小程序太陽碼的實現(xiàn)方案

    Java中生成微信小程序太陽碼的實現(xiàn)方案

    這篇文章主要介紹了Java中生成微信小程序太陽碼的實現(xiàn)方案,本文講解了如何生成微信小程序太陽碼,通過微信提供的兩種方案都可以實現(xiàn),在實際的項目中建議采用第二種方案,需要的朋友可以參考下
    2022-05-05
  • Java中的LinkedHashMap源碼分析

    Java中的LinkedHashMap源碼分析

    這篇文章主要介紹了Java中的LinkedHashMap源碼分析,LinkedHashMap是HashMap的子類,所以基本的操作與hashmap類似,不過呢,在插入、刪除、替換key-value對的時候,需要的朋友可以參考下
    2023-12-12

最新評論