1. 程式人生 > >兩種訪問介面的方式(get和post)

兩種訪問介面的方式(get和post)

   跨機器、跨語言的遠端訪問形式一共有三種:scoket傳送資料包、http傳送請求、rmi遠端連線;

http傳送請求方式;分為post和get兩種方式

importjava.io.IOException;

importjava.io.InputStream;

import java.util.Map;

importjava.util.concurrent.atomic.AtomicInteger;

importorg.apache.commons.httpclient.HttpClient;

importorg.apache.commons.httpclient.HttpException;

importorg.apache.commons.httpclient.HttpStatus;

importorg.apache.commons.httpclient.MultiThreadedHttpConnectionManager;

importorg.apache.commons.httpclient.NameValuePair;

importorg.apache.commons.httpclient.methods.GetMethod;

importorg.apache.commons.httpclient.methods.PostMethod;

importorg.apache.commons.httpclient.params.HttpConnectionManagerParams;

importorg.apache.commons.io.IOUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

publicclass SendHttpUrl {

 

    privatefinalstatic Logger logger = LoggerFactory.getLogger(SendHttpUrl.class);

    privatestatic HttpClient httpClient = null;

    privatestaticMultiThreadedHttpConnectionManager connectionManager = null;// 多執行緒管理器

    privateintmaxThreadsTotal = 128;// 最大執行緒數

    privateintmaxThreadsPerHost = 32; // 分配給每個客戶端的最大執行緒數

    privateintconnectionTimeout = 15000;// 連線超時時間,毫秒

    privateintsoTimeout = 14000;// 讀取資料超時時間,毫秒

 

    publicvoid init() {

       connectionManager = newMultiThreadedHttpConnectionManager();

       HttpConnectionManagerParams params = newHttpConnectionManagerParams();

       params.setConnectionTimeout(connectionTimeout);

       params.setMaxTotalConnections(maxThreadsTotal);

       params.setSoTimeout(soTimeout);

       if (maxThreadsTotal > maxThreadsPerHost) {

           params.setDefaultMaxConnectionsPerHost(maxThreadsPerHost);

       } else {

           params.setDefaultMaxConnectionsPerHost(maxThreadsTotal);

       }

       connectionManager.setParams(params);

       httpClient = new HttpClient(connectionManager);

       httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);

       httpClient.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);

    }

 

    /**

    * get方式訪問

    *

    * @param url

    * @param callType

    * @param parmMap

    * @return

    */

    private String callByGet(Stringurl, String callType, Map<String, String> parmMap) {

       if (logger.isDebugEnabled()){

           logger.debug("in get,url:" + url);

       }

       GetMethod getMethod = new GetMethod(url);

       int statusCode = 0;

       try {

           statusCode = httpClient.executeMethod(getMethod);

           if (logger.isDebugEnabled()){

                logger.debug("inget,statusCode:" + statusCode);

           }

           if (statusCode != HttpStatus.SC_OK) {

                // 訪問失敗

                logger.error("in get,訪問appagent失敗。網路問題。statusCode:" + statusCode);

                returnnull;

           }

           InputStream inputStream = getMethod.getResponseBodyAsStream();

           if (inputStream == null) {

               // 訪問正常:獲取到的資料為空

                logger.error("in get,從appagent返回的資料為空!");

                returnnull;

           }

           String rtn = IOUtils.toString(inputStream, "utf-8");

           return rtn;

       } catch (HttpException e) {

           logger.error("get方式訪問appagent失敗!", e);

           returnnull;

       } catch (IOException e) {

           logger.error("get方式訪問appagent失敗!", e);

           returnnull;

       } finally {

           getMethod.releaseConnection();

       }

    }

 

    /**

    * post方式訪問

    *

    * @param url

    * @param callType

    * @param parmMap

    * @return

    */

    private String callByPost(Stringurl, String callType, Map<String, String> parmMap) {

       if (logger.isDebugEnabled()){

            logger.debug("inpost,url:" + url);

       }

       PostMethod p = new PostMethod(url);

       if (parmMap != null) {

           NameValuePair[] params = newNameValuePair[parmMap.size()];

           AtomicInteger atomicInteger = new AtomicInteger(0);

           for (Map.Entry<String, String> parm :parmMap.entrySet()) {

                NameValuePair parmValue = newNameValuePair(parm.getKey(), parm.getValue());

               params[atomicInteger.getAndIncrement()] = parmValue;

           }

 

            p.setRequestBody(params);

       }

       try {

           int statusCode = httpClient.executeMethod(p);

           logger.debug("inget,statusCode:" + statusCode);

           if (statusCode != HttpStatus.SC_OK) {

                // 異常

                logger.error("in post,訪問appagent失敗。網路問題。statusCode:" + statusCode);

                returnnull;

           }

           InputStream inputStream = p.getResponseBodyAsStream();

           if (inputStream == null) {

                // 訪問正常

                logger.error("in post,從appagent返回的資料為空!");

                returnnull;

           }

           String rtn = IOUtils.toString(inputStream, "utf-8");

           return rtn;

       } catch (HttpException e) {

           logger.error("post方式訪問appagent失敗!", e);

           returnnull;

       } catch (IOException e) {

           logger.error("post方式訪問appagent失敗!", e);

           returnnull;

       } finally {

           p.releaseConnection();

       }

    }

}


相關推薦

訪問介面方式(getpost)

   跨機器、跨語言的遠端訪問形式一共有三種:scoket傳送資料包、http傳送請求、rmi遠端連線; http傳送請求方式;分為post和get兩種方式 importjava.io.IOException; importjava.io.InputStream; im

提交方式getpost有什麼區別

提交方式post和get有什麼區別?   (1)post是向伺服器傳送資料;get是從伺服器上獲取資料。 (2)在客戶端,get是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。 post是通過HTTP post機制,將表單內各個欄

HTTP請求方式GETPOST的區別詳解

HTTP有兩部分組成:請求與響應,下面分別整理。 一.HTTP請求 1.HTTP請求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP請

HTTP與伺服器互動的方式getpost的區別

1.http四種互動方式: get和post是HTTP與伺服器互動的方式,  說到方式,其實總共有四種:put,delete,post,get。  他們的作用分別是對伺服器資源的增,刪,改,查。  所以,get是獲取資料,post是修改資料。 2.

HTTP 請求方式: GETPOST的比較

什麼是HTTP? 超文字傳輸協議(HyperText Transfer Protocol -- HTTP)是一個設計來使客戶端和伺服器順利進行通訊的協議。 HTTP在客戶端和伺服器之間以request-response protocol(請求-回覆協議)工作。 GET

HTML form 表單提交方式getpost的區別

method屬性規定如何傳送表單的資料。有兩種提交的方法分別為get和post。 1、get:提交的資料量要小於1024位元組,表單提交時表單域數值(表單請求的資訊:賬號、密碼…)將在位址列顯示。

關於HTTP 請求方式: GETPOST的比較的本質

一,一般現在流傳的HTTP請求:GET和POST的比較是這樣的: GET和POST是HTTP的兩個常用方法。 什麼是HTTP? 超文字傳輸協議(HyperText Transfer Protocol -- HTTP)是一個設計來使客戶端和伺服器順利進行通訊的協議。 HT

瀏覽器伺服器互動方式GETPOST的區別

前言     做Web開發就一定會涉及到瀏覽器和伺服器的互動,所以瞭解瀏覽器和伺服器互動的方式就尤為重要。從接觸B/S開始就已經接觸到了get和post,但是對它們的瞭解確實不深入。在後來不斷的做專

Android 進階6:序列化方式 Serializable Parcelable

什麼是序列化 我們總是說著或者聽說著“序列化”,它的定義是什麼呢? 序列化 (Serialization)將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物

keras 訓練模型方式fitfit_generator(節省記憶體)

第一種,fit import keras from keras.models import Sequential from keras.layers import Dense import numpy as np from sklearn.preproce

Map的取值方式keySetentrySet

Map與Collection在集合框架中屬並列存在、 Map是一次新增一對元素(儲存的是夫妻,哈哈)。Collection是一次新增一個元素(儲存的是一個單體)。   Map儲存的是鍵值對。   Map儲存元素使用put方法, Collection

form表單中getpost提交方式的區別

name bsp inpu get div post input 普通 表單 一、form表單中get和post兩種提交方式的區別?   1.get提交表單中的內容在鏈接處是可見的。post不可見   2.post相比於get是安全的   3.post不收限制大小,get有

斑馬打印機客戶端GETPOST,以及後端打印方式

syn box orm sub make sys jquery 1.2 ace 斑馬打印機客戶端GET和POST,以及後端兩種打印方式。 背景環境:打印機安裝在客戶端外網。當用戶登錄時,通過ajax取服務器數據,返回打印機命令,然後客戶端通過JS發送給斑馬打印機。 1、使用

Http請求方式Get Post的區別

什麼是HTTP? 超文字傳輸協議(HyperText Transfer Protocol – HTTP)是一個設計來使客戶端和伺服器順利進行通訊的協議。 HTTP在客戶端和伺服器之間以request-response protocol(請求-回覆協議)工作。 get:從指定的伺服器中獲取

HttpClient傳送請求,getpost方式,分別帶引數不帶引數

(一)、匯入HttpCLient的jar包 <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <arti

ajax與伺服器傳值有方式get post的區別

get是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。get可以使用瀏覽器的快取機制,別

getpost表單提交方式的區別

角色 編碼方式 不同 面試官 qpi 但是 優化 method log 今天看到一篇博客談論get和post區別,簡單總結一下https://www.cnblogs.com/logsharing/p/8448446.html 要說兩者的區別,接觸過web開發的人基本上都能說

GETPOST基本請求方法的區別

完整性 總結 優化 返回 們的 傳遞參數 src 本質 大成 GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中,POST通過request body傳遞參數。 你可能自己寫過

GETPOST請求方法的區別(RFC翻譯)

  GET和POST方法是HTTP協議規定的。查了HTTP1.1的RFC,原文的專業性極強。下面是白話翻譯,歡迎補充和指錯。   GET方法就是檢索(以實體的形式)由請求uri所指定的資源。如果請求的uri指向資料產生的過程,應該把產生的資料應作為實體在響應中返回而不是源文字,除非原始檔指向輸出過

HTTP請求協議中GETPOST基本請求方法的區別

GET在瀏覽器回退時是無害的,而POST會再次提交請求。   GET產生的URL地址可以被Bookmark,而POST不可以。   GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。   GET請求只能進行url編碼