java http get post 各种请求,模拟浏览器请求

简介: package com.hlzt.wx.util.http;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import com.hl

package com.hlzt.wx.util.http;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import com.hlzt.wx.util.token.GlobalAccessTokenUtils;

public class HttpClientConnectionManager {
 
 
	 // http客户端
	private static DefaultHttpClient httpclient=new DefaultHttpClient();
	 
	

	public static DefaultHttpClient getHttpclient() {
		return httpclient;
	}


	public static void setHttpclient(DefaultHttpClient httpclient) {
		HttpClientConnectionManager.httpclient = httpclient;
	}
 /**
  * 获取SSL验证的HttpClient
  * @param httpClient
  * @return
  *//*
 public static HttpClient getSSLInstance(HttpClient httpClient){
  ClientConnectionManager ccm = httpClient.getConnectionManager();
  SchemeRegistry sr = ccm.getSchemeRegistry();
  sr.register(new Scheme("https", MySSLSocketFactory.getInstance(), 443));
  httpClient =  new DefaultHttpClient(ccm, httpClient.getParams());
  return httpClient;
 }*/
 
 /**
  * 模拟浏览器post提交
  * @param url
  * @return
  */
 public static HttpPost getPostMethod(String url) {
  HttpPost pmethod = new HttpPost(url); // 设置响应头信息
  pmethod.addHeader("Connection", "keep-alive");
  pmethod.addHeader("Accept", "*/*");
  pmethod.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  pmethod.addHeader("Host", "mp.weixin.qq.com");
  pmethod.addHeader("X-Requested-With", "XMLHttpRequest");
  pmethod.addHeader("Cache-Control", "max-age=0");
  pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
  return pmethod;
 }

 /**
  * 模拟浏览器GET提交
  * @param url
  * @return
  */
 public static HttpGet getGetMethod(String url) {
  HttpGet pmethod = new HttpGet(url);
  // 设置响应头信息
  pmethod.addHeader("Connection", "keep-alive");
  pmethod.addHeader("Cache-Control", "max-age=0");
  pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
  pmethod.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8");
  return pmethod;
 }
}


package com.hlzt.wx.util.http;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

import org.apache.commons.collections4.map.LinkedMap;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.EntityBuilder;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



/**
 * 通过HttpClient访问,网站的url
 * @author zhouhf
 * @version 1.0 2014年9月24日
 * @since 1.6
 */
public final class WxHttpClientUtils {

	/**
	 * 日志对象
	 */
	protected static Logger logger = LoggerFactory.getLogger(WxHttpClientUtils.class);
	
	 // http客户端
		private static DefaultHttpClient httpclient=new DefaultHttpClient();
		 
		

		public static DefaultHttpClient getHttpclient() {
			return httpclient;
		}


		public static void setHttpclient(DefaultHttpClient httpclient) {
			WxHttpClientUtils.httpclient = httpclient;
		}
	
	/**
	 * 尝试请求指定链接是否正常
	 * @param client 客户端对象
	 * @param url 请求的链接
	 * @throws HttpException
	 * @throws IOException
	 */
	public static boolean testUrl(String url){
		return testUrl(createHttpClient(),url);
	}
	
	/**
	 * 尝试请求指定链接是否正常
	 * @param client 客户端对象
	 * @param url 请求的链接
	 * @throws HttpException
	 * @throws IOException
	 */
	public static boolean testUrl(HttpClient client,String url){
		HttpGet httpGet=new HttpGet(url);
		httpGet.addHeader("Content-Type", "text/html;charset=UTF-8");
		int statusCode = 0;
		try {
			HttpResponse response = client.execute(httpGet);
			statusCode = response.getStatusLine().getStatusCode();
		} catch (Exception e) {
			logger.error("HttpClient请求异常",e);
		} finally{
			httpGet.abort();
		}
		if(HttpStatus.SC_OK != statusCode){
			return false;
		}
		return true;
	}
	
	
	/**
	 * 通过GET方法请求服务器文本数据
	 * @param url 地址
	 * @param parameters 参数
	 * @return 结果文本
	 * @throws HttpException
	 * @throws IOException
	 */
	public static String httpGetText(String url,LinkedMap<String,Object> parameters) throws HttpException, IOException{
		return httpGetText(createHttpClient(),url,parameters);
	}
	
	/**
	 * 通过GET方法请求服务器文本数据
	 * @param client http客户端
	 * @param url 地址
	 * @param parameters 参数
	 * @return 结果文本
	 * @throws HttpException
	 * @throws IOException
	 */
	public static String httpGetText(HttpClient client,String url,LinkedMap<String,Object> parameters) throws HttpException, IOException{
		if(parameters != null && parameters.size() > 0){
			List<NameValuePair> params = new ArrayList<NameValuePair>();
			for(int i=0,len = parameters.size(); i < len; i++){
				Object v = parameters.getValue(i);
				if(v == null)
					continue;
				String value = v.toString();
				String key = parameters.get(i);
				params.add(new BasicNameValuePair(key,value));
			}
			if(url.indexOf("?") > -1){
				url += "&" + URLEncodedUtils.format(params, "UTF-8");
			}else{
				url += "?" + URLEncodedUtils.format(params, "UTF-8");
			}
		}
		HttpGet httpGet=new HttpGet(url);
		httpGet.addHeader("Content-Type", "text/html;charset=UTF-8");
		try{
			HttpResponse response = client.execute(httpGet);
			InputStream  is = response.getEntity().getContent();
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			IOUtils.copy(is,os);
			return new String(os.toByteArray(),"UTF-8");
		}finally{
			httpGet.abort();
		}
		
	}

	/**
	 * 通过POST方式向服务器发送数据
	 * @param client http客户端
	 * @param url 地址
	 * @param parameters 参数集
	 * @param attachs 附件列表
	 * @return 返回结果
	 * @throws HttpException
	 * @throws IOException
	 */
	public static String httpPostUpload(HttpClient client,String url,LinkedMap<String,Object> parameters,LinkedMap<String,File> attachs) throws HttpException, IOException{
		HttpPost httpPost=new HttpPost(url);
		HttpEntity entity = null;
		if(attachs != null && attachs.size() > 0){
			MultipartEntityBuilder multipartBuilder = MultipartEntityBuilder.create();
			multipartBuilder.setCharset(Charset.forName("UTF-8"));
			for(int i = 0,len = attachs.size(); i< len; i++){
				multipartBuilder.addBinaryBody(attachs.get(i), attachs.getValue(i));
			}
			if(parameters != null && parameters.size() > 0){
				for(int i=0,len = parameters.size(); i < len; i++){
					Object v = parameters.getValue(i);
					if(v == null)
						continue;
					String value = v.toString();
					String key = parameters.get(i);
					multipartBuilder.addTextBody(key, value);
					
				}
			}
			entity = multipartBuilder.build();
		}else if(parameters != null && parameters.size() > 0){
			List<NameValuePair> params = new ArrayList<NameValuePair>();
			for(int i=0,len = parameters.size(); i < len; i++){
				Object v = parameters.getValue(i);
				if(v == null)
					continue;
				String value = v.toString();
				String key = parameters.get(i);
				params.add(new BasicNameValuePair(key, value));
			}
			EntityBuilder builder = EntityBuilder.create();
			builder.setContentEncoding("UTF-8");
			builder.setParameters(params);
			entity = builder.build();
		}
		if(entity != null)
			httpPost.setEntity(entity);
		try {
			HttpResponse response = client.execute(httpPost);
			return EntityUtils.toString(response.getEntity(), "GBK");
		}finally{
			httpPost.abort();
		}
	}
	
	/**
	 * 通过POST方式向服务器发送数据
	 * @param url 地址
	 * @param parameters 参数集
	 * @param attachs 附件列表
	 * @return 返回结果
	 * @throws HttpException
	 * @throws IOException
	 */
	public static String httpPostUpload(String url,LinkedMap<String,Object> parameters,LinkedMap<String,File> attachs) throws HttpException, IOException{
		return httpPostUpload(createHttpClient(),url,parameters,attachs);
	}
	
	/**
	 * 创建httpClient对象
	 * @return httpClient对象
	 */
	public static HttpClient createHttpClient(){
		return HttpClientBuilder.create().build();
	}
	
	
	
	 /**
	  * 模拟浏览器post提交
	  * @param url
	  * @return
	  */
	 public static HttpPost getPostMethod(String url) {
	  HttpPost pmethod = new HttpPost(url); // 设置响应头信息
	  pmethod.addHeader("Connection", "keep-alive");
	  pmethod.addHeader("Accept", "*/*");
	  pmethod.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	  pmethod.addHeader("Host", "mp.weixin.qq.com");
	  pmethod.addHeader("X-Requested-With", "XMLHttpRequest");
	  pmethod.addHeader("Cache-Control", "max-age=0");
	  pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
	  return pmethod;
	 }

	 /**
	  * 模拟浏览器GET提交
	  * @param url
	  * @return
	  */
	 public static HttpGet getGetMethod(String url) {
	  HttpGet pmethod = new HttpGet(url);
	  // 设置响应头信息
	  pmethod.addHeader("Connection", "keep-alive");
	  pmethod.addHeader("Cache-Control", "max-age=0");
	  pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
	  pmethod.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8");
	  return pmethod;
	 }
	 
	 /**
	  * get方式模拟浏览器请求
	  * @param url
	  * @return
	  */
	 public static String getHttpGetReturnStr(String url)
	 {
		 
		 HttpGet get = getGetMethod(url);
		 String returnStr=null;
		 try {
		  HttpResponse response = getHttpclient().execute(get);
		  returnStr = EntityUtils.toString(response.getEntity(), "utf-8");
		 } catch (Exception e) {
				logger.info("#################   HttpGet请求出错");
	     }
		return returnStr;
	 }
	 
	 /**
	  * post模拟浏览器请求,
	  * @param url
	  * @param entityJson
	  * @return
	  */
	 public static String getHttpPostReturnStr(String url,String entityJson)
	 {
		 
		 HttpPost httpost = HttpClientConnectionManager.getPostMethod(url);
		 httpost.setEntity(new StringEntity(entityJson, "UTF-8"));
		 String returnStr=null;
          try {
		
		  HttpResponse response = getHttpclient().execute(httpost);
		  returnStr = EntityUtils.toString(response.getEntity(), "utf-8");
			
  		} catch (Exception e) {
  			logger.info("#################   HttpPost请求出错");
  		}
		return returnStr;
	 }
	
}


目录
相关文章
|
8天前
|
缓存 应用服务中间件 Apache
HTTP 范围Range请求
HTTP范围请求是一种强大的技术,允许客户端请求资源的部分内容,提高了传输效率和用户体验。通过正确配置服务器和实现范围请求,可以在视频流、断点续传下载等场景中发挥重要作用。希望本文提供的详细介绍和示例代码能帮助您更好地理解和应用这一技术。
53 19
|
16天前
|
JSON JavaScript 前端开发
什么是HTTP POST请求?初学者指南与示范
HTTP POST请求是一种常用的HTTP方法,主要用于向服务器发送数据。通过合理设置请求头和请求主体,可以实现数据的可靠传输。无论是在客户端使用JavaScript,还是在服务器端使用Node.js,理解和掌握POST请求的工作原理和应用场景,对于Web开发至关重要。
162 18
|
16天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
61 2
|
1月前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
96 15
|
4天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
42 17
|
15天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
17天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
17天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
17天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
42 3
|
17天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
101 2