/**
*
*/
package cn.vwall.player;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ProtocolException;
import org.apache.http.client.RedirectStrategy;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.cookie.Cookie;
import org.apache.http.cookie.CookieOrigin;
import org.apache.http.cookie.CookieSpec;
import org.apache.http.cookie.CookieSpecFactory;
import org.apache.http.cookie.MalformedCookieException;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BrowserCompatSpec;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
/**
* @author star.y
* =============================================================
* http://www.eqiao.com
* 2013-10-4
* Flex_Player-cn.vwall.player-HttpTools.java
* =============================================================
*/
public class HttpTools {
private DefaultHttpClient httpclient ;
private FileWriter fw;
private FileReader fr;
private char [] cookieString =new char[4096];
private Logger loger = Logger.getLogger(HttpTools.class);
public HttpTools(){
try {
httpclient = new DefaultHttpClient();
//setting cookie
fw = new FileWriter("C:/cookie.txt");
fr = new FileReader("C:/cookie.txt");
//cookie strategy
CookieSpecFactory csf = new CookieSpecFactory() {
public CookieSpec newInstance(HttpParams params) {
return new BrowserCompatSpec() {
@Override
public void validate(Cookie cookie, CookieOrigin origin)throws MalformedCookieException {
// Oh, I am easy
}
};
}
};
httpclient.getCookieSpecs().register("easy", csf);
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, "easy");
// 手动 redirect
httpclient.setRedirectStrategy(new RedirectStrategy() {
@Override
public boolean isRedirected(HttpRequest request, HttpResponse response,
HttpContext context) throws ProtocolException {
return false;
}
@Override
public HttpUriRequest getRedirect(HttpRequest request,
HttpResponse response, HttpContext context)
throws ProtocolException {
return null;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param propotal
* @param host
* @param port
* @param path
* @param params
* @return
*/
public synchronized String get(String propotal ,String host,int port ,String path,Map<String,String> params){
String result = "";
HttpGet request = null;
try{
List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
for(Map.Entry<String, String> param : params.entrySet()){
pairs.add(new BasicNameValuePair(param.getKey(),param.getValue()));
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, "UTF-8");
String param = EntityUtils.toString(entity);
URI uri = URIUtils.createURI(propotal, host, port,path, param, null);
request = new HttpGet(uri);
//setHeader(request);
HttpResponse response = httpclient.execute(request);
//读取cookie并保存文件
List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
System.out.println(cookies.get(i).toString());
fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");
fw.flush();
}
}
readCookieToString();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
System.out.println("----------------------------------------------------------------------");
result = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println("----------------------------------------------------------------------");
EntityUtils.consume(response.getEntity());
return result;
}
}catch(IOException e){
loger.error(e.getMessage());
} catch (URISyntaxException e) {
e.printStackTrace();
}finally{
if(null!=request)
request.abort();
}
return null;
}
/**
* @param url
* @param params
* @return
*/
public synchronized String post(String url,Map<String,String> params,String ykss){
String result = "";
HttpPost request = null;
try{
List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
for(Map.Entry<String, String> param : params.entrySet()){
pairs.add(new BasicNameValuePair(param.getKey(),param.getValue()));
}
request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(pairs,"UTF-8"));
setHeader(request,ykss);
HttpResponse response = httpclient.execute(request);
//读取cookie并保存文件
List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
System.out.println(cookies.get(i).toString());
fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");
fw.flush();
}
}
readCookieToString();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
System.out.println("----------------------------------------------------------------------");
result = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println("----------------------------------------------------------------------");
EntityUtils.consume(response.getEntity());
return result;
}else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
|| statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_SEE_OTHER
|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
){
Header [] headers = response.getHeaders("Location");
if (headers[0] != null) {
String newuri = headers[0].getValue();
if ((newuri == null) || (newuri.equals("")))
newuri = "/";
request.abort();
HttpGet gg = new HttpGet(newuri);
httpclient.execute(gg);
gg.abort();
}
}
}catch(IOException e){
loger.error(e.getMessage());
} finally{
if(null!=request)
request.abort();
}
return null;
}
/**
* @param url
* @param params
* @param updateFile
* @return
*/
public synchronized String postFile(String url,Map<String,String> params,File updatefile){
String result = "";
HttpPost request = null;
FileBody bin = null;
try{
if(null!=updatefile){
bin = new FileBody(updatefile);
}
MultipartEntity reqEntity = new MultipartEntity();
for(Map.Entry<String, String> entry : params.entrySet()){
reqEntity.addPart(entry.getKey(), new StringBody(entry.getValue(),Charset.forName("UTF-8")));
}
reqEntity.addPart("data", bin);
request = new HttpPost(url);
request.setEntity(reqEntity);
HttpResponse response = httpclient.execute(request);
//读取cookie并保存文件
List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
System.out.println(cookies.get(i).toString());
fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");
fw.flush();
}
}
readCookieToString();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
System.out.println("----------------------------------------------------------------------");
result = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println("----------------------------------------------------------------------");
EntityUtils.consume(response.getEntity());
return result;
}else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
|| statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_SEE_OTHER
|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
){
Header [] headers = response.getHeaders("Location");
if (headers[0] != null) {
String newuri = headers[0].getValue();
if ((newuri == null) || (newuri.equals("")))
newuri = "/";
request.abort();
HttpGet gg = new HttpGet(newuri);
httpclient.execute(gg);
gg.abort();
}
}
}catch(IOException e){
loger.error(e.getMessage());
} finally{
if(null!=request)
request.abort();
}
return null;
}
/**
* @param url
* @param params
* @param bb 文件分片
* @return
*/
public synchronized String postBytes(String url,Map<String,String> params,byte [] bb,String filename){
String result = "";
HttpPost request = null;
ByteArrayBody bin = null;
try{
if(null!=bb){
bin = new ByteArrayBody(bb,filename);
}
MultipartEntity reqEntity = new MultipartEntity();
for(Map.Entry<String, String> entry : params.entrySet()){
reqEntity.addPart(entry.getKey(), new StringBody(entry.getValue(),Charset.forName("UTF-8")));
}
reqEntity.addPart("data", bin);
request = new HttpPost(url);
request.setEntity(reqEntity);
HttpResponse response = httpclient.execute(request);
//读取cookie并保存文件
List<org.apache.http.cookie.Cookie> cookies = httpclient.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
System.out.println(cookies.get(i).toString());
fw.write(cookies.get(i).getName()+"="+cookies.get(i).getValue()+";");
fw.flush();
}
}
readCookieToString();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
System.out.println("----------------------------------------------------------------------");
result = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println("----------------------------------------------------------------------");
EntityUtils.consume(response.getEntity());
return result;
}else if(statusCode == HttpStatus.SC_MOVED_TEMPORARILY
|| statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_SEE_OTHER
|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT
){
Header [] headers = response.getHeaders("Location");
if (headers[0] != null) {
String newuri = headers[0].getValue();
if ((newuri == null) || (newuri.equals("")))
newuri = "/";
request.abort();
HttpGet gg = new HttpGet(newuri);
httpclient.execute(gg);
gg.abort();
}
}
}catch(IOException e){
loger.error(e.getMessage());
} finally{
if(null!=request)
request.abort();
}
return null;
}
private void readCookieToString(){
try {
while(fr.read(cookieString)!=-1);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void setHeader(HttpRequestBase request,String ykss){
request.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setHeader("Accept-Encoding","");
request.setHeader("Accept-Language","zh-CN,zh;q=0.8");
request.setHeader("Content-Type","application/x-www-form-urlencoded");
request.setHeader("Origin","https://openapi.youku.com");
request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36");
request.setHeader("Cookie",ykss);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
fw.close();
fr.close();
}
public String cookieString(){
return String.valueOf(cookieString);
}
}
httpclient 上传文件客户端处理
最新推荐文章于 2024-01-19 09:12:00 发布