两种访问接口的方式(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();

       }

    }

}



转正请指明:blog.csdn.net/yangkai_hudong

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
只要是通过认证的支付宝帐户均可实现在线支付。方便快捷,设置好自己的帐户,就可以在线实时收款了。 内附ASP,PHP,NET示例 使用方法: 在获得到对应的接口代码后 1、打开Config.asp 配置文件好您的支付宝帐号,注意!!!必须是要通过身份认证的方能使用,收款手续费百分之三。 2、把ASP代码发布到IIS 服务器中,直接访问index.asp文件为网银行直连,访问alipay.asp是直接到就可以到支付宝的收银台 3、对支付成功的订单信息,进行数据库的操作。 返回的机制有两种: 一种 return_url 即时返回,此返回是get方式。 二种 notify_url 通知返回,此返回时post方式,进行服务器点对点的通知机制。 注意:返回的地址中不能自定义携带参数。例如 http://www.alipay.com/return_Alipay_Notify.asp?xx=test 更多有关返回机制及区别请查看文档。 4、如果获得返回信息 在指定的两种返回接收的文件中 get或post获得 例如:return_url:返回设置文件中的return_Alipay_Notify.asp, 商户网站中传递给支付宝的订单号码-------request("out_trade_no") , 价格-------request("price") notify_url:返回设置文件中的Alipay_Notify.asp, 商户网站中传递给支付宝的订单号码-------request("out_trade_no") , 价格-------request("price") 5、用这个你们开发的支付宝接口资金安全吗? 我们是正规合法注册的公司,是我们自己和支付宝签约后,为了方便更多的网友能便捷使用支付宝在线支付接口而开发的,并非赢利产品。付款是直接到达的您所设置的支付宝帐户的。 6、如果两种方式都设置,就要判断交易的订单是否有更新过,因为两种返回机制不同。可能同时返回、或者有先后,注意订单更新时候要判断订单不能个重复更新。 买家付完款(trade_status=TRADE_FINISHED)在此状 态下进行数据库的更新。并返回给支付宝success。若没有得到success。 如有疑问,请联系QQ:399051063.
在提供服务给另外一个系统使用时,如果不提供跨域支持,另外的那个系统在访问本系统提供的服务时会收到Access-Control-Allow-Origin类型的错误,并且访问失败。 添加跨域访问支持有两种简单的方式:一种是在所有头接口返回的response头中添加response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1/*");另外一种就是在本系统的web.xml中添加CORS支持。 CORS支持需要用到两个jar文件,分别是cors-filter-1.7.jar和java-property-utils-1.9.1.jar。 把他们放到工程的lib中,然后在web.xml中添加: < filter > < filter-name > CORS </ filter-name > < filter-class > com.thetransactioncompany.cors.CORSFilter </ filter-class > < init-param > < param-name > cors.allowOrigin </ param-name > < param-value > * </ param-value > </ init-param > < init-param > < param-name > cors.supportedMethods </ param-name > < param-value > GET, POST, HEAD, PUT, DELETE </ param-value > </ init-param > < init-param > < param-name > cors.supportedHeaders </ param-name > < param-value > Accept, Origin, X-Requested-With, Content-Type, Last-Modified </ param-value > </ init-param > < init-param > < param-name > cors.exposedHeaders </ param-name > < param-value > Set-Cookie </ param-value > </ init-param > < init-param > < param-name > cors.supportsCredentials </ param-name > < param-value > true </ param-value > </ init-param > </ filter > < filter-mapping > < filter-name > CORS </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping >
### 回答1: 在编程领域,"pb" 可能指代 Protocol Buffers,是一种用于序列化结构化数据的语言无关、平台无关、可扩展的机制。 要使用 Protocol Buffers 中的 GET 和 POST 方法,我们需要首先创建一个.proto 文件,定义消息类型和服务。 GET 方法的实现步骤如下: 1. 在.proto 文件中定义一个消息类型,包含需要获取的数据字段。 2. 在.proto 文件中定义一个服务,在服务中添加一个针对 GET 请求的方法。该方法需要定义参数和返回类型。 3. 使用 Protocol Buffers 的编译器将.proto 文件编译成相应的编程语言的代码文件。 4. 在服务器端编写代码实现 GET 方法,根据客户端的请求,获取需要的数据并返回。 POST 方法的实现步骤如下: 1. 在.proto 文件中定义一个消息类型,包含需要传输的数据字段。 2. 在.proto 文件中定义一个服务,在服务中添加一个针对 POST 请求的方法。该方法需要定义参数和返回类型。 3. 使用 Protocol Buffers 的编译器将.proto 文件编译成相应的编程语言的代码文件。 4. 在客户端编写代码实现 POST 方法,将需要传输的数据序列化成 Protocol Buffers 格式,并通过网络发送给服务器端。 5. 在服务器端编写代码实现 POST 方法,接收客户端发送的数据,并根据需求进行处理。 上述过程只是大致的步骤,具体实现还需根据编程语言和框架来确定。总之,通过 Protocol Buffers 提供的消息类型和服务,我们可以方便地实现 GET 和 POST 方法来进行数据的交互。 ### 回答2: 在计算机科学中,"get"和 "post" 是两种常用的 HTTP 请求方法。它们用于客户端(如浏览器)与服务器之间进行数据的传输与通信。 "Get" 是一种从服务器获取数据的请求方法。当我们在浏览器中输入网址或点击某个链接时,它会发送一个 "get" 请求到服务器,并返回服务器上对应网页的内容(HTML、CSS、JavaScript等)。"Get" 请求可以携带一些参数,这些参数通常会附加在请求的URL后面,以 "?" 开头,多个参数之间使用 "&" 进行分隔。这些参数可以用来传递信息,例如搜索关键字。 "Post" 是一种向服务器提交数据的请求方法。当我们在网页中填写表单并点击提交按钮时,通常会发送一个 "post" 请求到服务器,并将表单中的数据发送给服务器进行处理。不同于 "get" 请求将参数明文显示在 URL 上,"post" 请求的参数是通过请求体(request body)进行传输,所以相对来说更安全。"Post" 请求常用于提交用户注册、登录、评论等操作。 总结来说,"get" 和 "post" 都是用于客户端与服务器之间通信的常见请求方式。"get" 主要用于获取数据,在 URL 中传递少量参数,而 "post" 则主要用于向服务器提交数据,安全性较高。在实际应用中,我们需要根据具体的业务需求来选择合适的请求方式。 ### 回答3: GET和POST是HTTP协议中常用的两种请求方法。 GET方法用于从服务器获取资源,它通过在URL中附加参数的方式将请求信息发送给服务器。例如,可以使用GET方法从服务器上获取一个网页文件,或者通过URL中的参数来限定返回结果,比如搜索关键词。GET请求可以通过浏览器直接发送,也可以通过编程语言的网络库发送。 例如,通过浏览器访问一个网页时,URL会包含GET请求的参数,服务器接收到请求后会根据参数的不同返回相应的结果。 而POST方法用于向服务器提交数据,它将请求信息放在HTTP请求的消息体中发送给服务器。相比GET方法,POST方法适用于需要提交大量数据或进行敏感操作的情况,因为POST请求的参数不会暴露在URL中。 通常情况下,使用浏览器发送POST请求通常是通过表单提交实现的。我们在网页上填写表单内容,然后通过提交按钮将表单内容通过POST请求发送给服务器,服务器接收到请求后进行相应的处理。 同样地,通过编程语言发送POST请求也是很常见的,可以使用相应的网络库提供的接口将请求数据放在请求的消息体中,并发送给服务器。 综上所述,GET和POST是HTTP协议中常用的两种请求方法,GET用于获取资源,通过URL附加参数的方式发送请求;POST用于提交数据,将请求信息放在HTTP请求的消息体中发送给服务器。无论是通过浏览器还是编程语言发送请求,都能使用这两种方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值