HttpClient (POST GET PUT)请求
package com.curender.web.server.http;
import java.io.IOException;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.curender.dal.util.ConstantsDal;
/**
* HttpClient GET POST PUT 请求
* @author huang
* @date 2013-4-10
*/
public class HttpRequest
{
protected static Log log = LogFactory.getLog(HttpRequest.class);
private static HttpRequest httpRequst=null;
private HttpRequest(){}
public static HttpRequest getInstance(){
if(httpRequst==null){
synchronized(HttpRequest.class){
if(httpRequst == null){
httpRequst=new HttpRequest();
}
}
}
return httpRequst;
}
/**
* HttpClient GET请求
* @author huang
* @date 2013-4-9
* @param uri
* @return resStr 请求返回的JSON数据
*/
public String doGet(String uri){
String resStr = null;
HttpClient htpClient = new HttpClient();
GetMethod getMethod = new GetMethod(ConstantsDal.SERVER_URL+uri);
getMethod.getParams().setParameter( HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
try{
int statusCode = htpClient.executeMethod( getMethod );
// log.info(statusCode);
if(statusCode != HttpStatus.SC_OK){
log.error("Method failed: "+getMethod.getStatusLine());
return resStr;
}
byte[] responseBody = getMethod.getResponseBody();
resStr = new String(responseBody,HttpConstants.ENCODED);
} catch (HttpException e) {
log.error("Please check your provided http address!"); //发生致命的异常,可能是协议不对或者返回的内容有问题
} catch (IOException e) {
log.error( "Network anomaly" ); //发生网络异常
}finally{
getMethod.releaseConnection(); //释放连接
}
return resStr;
}
/**
* HttpClient POST请求
* @author huang
* @date 2013-4-9
* @param s_user
* @return resStr 请求返回的JSON数据
*/
@SuppressWarnings( "deprecation" )
public String doPost(String uri,String jsonObj){
String resStr = null;
HttpClient htpClient = new HttpClient();
PostMethod postMethod = new PostMethod(ConstantsDal.SERVER_URL+uri);
postMethod.addRequestHeader( "Content-Type","application/json" );
postMethod.getParams().setParameter( HttpMethodParams.HTTP_CONTENT_CHARSET, HttpConstants.ENCODED );
postMethod.setRequestBody( jsonObj );
try{
int statusCode = htpClient.executeMethod( postMethod );
// log.info(statusCode);
if(statusCode != HttpStatus.SC_OK){
//post和put不能自动处理转发 301:永久重定向,告诉客户端以后应从新地址访问 302:Moved Temporarily
if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY||statusCode == HttpStatus.SC_MOVED_TEMPORARILY){
Header locationHeader = postMethod.getResponseHeader( "location" );
String location = null;
if(locationHeader!=null){
location = locationHeader.getValue();
log.info("The page was redirected to :"+location);
}else{
log.info("Location field value is null");
}
}else{
log.error("Method failed: "+postMethod.getStatusLine());
}
return resStr;
}
byte[] responseBody = postMethod.getResponseBody();
resStr = new String(responseBody,HttpConstants.ENCODED);
}catch(Exception e){
e.printStackTrace();
}finally{
postMethod.releaseConnection();
}
return resStr;
}
/**
* HttpClient PUT请求
* @author huang
* @date 2013-4-10
* @return
*/
@SuppressWarnings( "deprecation" )
public String doPut(String uri,String jsonObj){
String resStr = null;
HttpClient htpClient = new HttpClient();
PutMethod putMethod = new PutMethod(ConstantsDal.SERVER_URL+uri);
putMethod.addRequestHeader( "Content-Type","application/json" );
putMethod.getParams().setParameter( HttpMethodParams.HTTP_CONTENT_CHARSET, HttpConstants.ENCODED );
putMethod.setRequestBody( jsonObj );
try{
int statusCode = htpClient.executeMethod( putMethod );
// log.info(statusCode);
if(statusCode != HttpStatus.SC_OK){
log.error("Method failed: "+putMethod.getStatusLine());
return null;
}
byte[] responseBody = putMethod.getResponseBody();
resStr = new String(responseBody,HttpConstants.ENCODED);
}catch(Exception e){
e.printStackTrace();
}finally{
putMethod.releaseConnection();
}
return resStr;
}
}
HttpClient方式模拟http请求设置头
关于HttpClient方式模拟http请求,请求头以及其他参数的设置. 本文就暂时不给栗子了,当作简版参考手册吧. 发送请求是设置请求头:header HttpClient httpClient = ...
HttpClient发送get post请求和数据解析
最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写,我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传 ...
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
使用HttpClient发送Get/Post请求 你get了吗?
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 ...
org.apache.httpcomponents httpclient 发起HTTP JSON请求
1. pom.xml org.apache.httpcomponents
httpclient的几种请求URL的方式
一.httpclient项目有两种使用方式.一种是commons项目,这一个就只更新到3.1版本了.现在挪到了HttpComponents子项目下了,这里重点讲解HttpComponents下面的ht ...
HttpClient发起Http/Https请求工具类
org.apache.httpcomponentshttpcl ...
HttpClient方式模拟http请求
方式一:HttpClient import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.http.*; im ...
Android HttpClient GET或者POST请求基本使用方法(转)
在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.这里只介绍如何使用HttpCl ...
随机推荐
idea-生成key的Java代码
import java.math.BigInteger; import java.util.Date; import java.util.Random; import java.util.Scanne ...
java 实现从15位~18位的身份证号码转换,校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证。
package xidian.sl.netcredit.util; /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. ...
StringIO学习
StringIO StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以将操作磁盘文件那样来操作StringIO.一个简单的例子,让你对StringIO有一 ...
(四)linux常用命令
1.在vim下要查找特定的字符串可按Esc键,然后按/字符串,如/DFGE 2.在vim下要显示行数:set nu
POJ_2104_Kth_(主席树)
描述 http://poj.org/problem?id=2104 给出一个n个数的数列,m次询问,每次询问求区间[l,r]中第k小的数,无修改操作. K-th Number Time Limit: ...
rsync实现文件备份同步(比如服务器镜像)
[rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync] 一.什么是rsync rsync,remote synchronize顾 ...
Android Toast 工具类
android 中常用系统吐司工具类 package cn.yhq.utils; import android.content.Context; import android.widget.Toas ...
断路器(Curcuit Breaker)模式
在分布式环境下,特别是微服务结构的分布式系统中, 一个软件系统调用另外一个远程系统是非常普遍的.这种远程调用的被调用方可能是另外一个进程,或者是跨网路的另外一台主机, 这种远程的调用和进程的内部调用最 ...
npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX
问题 使用npm install时提示权限不足 原因 这里原因有两个: 没有管理员权限访问C盘下npm路径导致下载失败. NPM官网没有下载权限. 解决方案 第一原因 这里可以使用管理员身份执行以下命 ...