• android 向serverGet和Post请求的两种方式,android向server发送文件,自己组装协议和借助第三方开源


    一个适用于Android平台的第三方和apache的非常多东西类似,仅仅是用于Android上

    我在项目里用的是这个

    https://github.com/loopj/android-async-http

     AsyncHttpClient  client = new AsyncHttpClient();


    RequestParams params = new RequestParams();
    params.put(JsonKey.JSON_K_MOBILE, "1526808");
    params.put(JsonKey.JSON_K_COUPON, coupon);

    put(File,...);


    /** 
     * @author intbird@163.com 
     * @time 20140606 
     */ 
    package com.intbird.utils;
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.mime.MultipartEntity;
    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.util.EntityUtils;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Handler;
    import android.os.Message;
    
    public class ConnInternet {
    	/**
    	 * 開始连接
    	 */
    	public static int HTTP_STATUS_START=0;
    	/**
    	 * 连接过程出错
    	 */
    	public static int HTTP_STATUS_ERROR=400;
    	/**
    	 * 请求成功,返回数据
    	 */
    	public static int HTTP_STATUS_REULTOK=200;
    	/**
    	 * server未响应
    	 */
    	public static int HTTP_STATUS_NORESP=500;
    	
    	/**
    	 * 普通GET请求
    	 * @param api
    	 * @param callBack
    	 */
    	public static void get1(final String api,final ConnInternetCallback callBack) {
    		final Handler handler=getHandle(api, callBack);
    		new Thread(){
    			@Override
    			public void run() {
    				Message msg=handler.obtainMessage(HTTP_STATUS_START, "開始连接");
    				try {
    					URL url = new URL(api);
    					HttpURLConnection urlConn =  (HttpURLConnection) url.openConnection();
    					int resCode=urlConn.getResponseCode();
    					if(resCode!=HTTP_STATUS_REULTOK){
    						msg.what=HTTP_STATUS_NORESP;
    						msg.obj=resCode;
    						handler.sendMessage(msg);
    						return ;
    					}
    					InputStreamReader inStream=new InputStreamReader(urlConn.getInputStream());
    					BufferedReader buffer=new BufferedReader(inStream);
    					
    					String result="";
    					String inputLine=null;
    					while((inputLine=buffer.readLine())!=null){
    						result+=inputLine;
    					}
    					msg.what=HTTP_STATUS_REULTOK;
    				    msg.obj=URLDecoder.decode(result,"UTF-8");
    				    
    					inStream.close();
    					urlConn.disconnect();
    				} catch (Exception ex) {
    					msg.what=HTTP_STATUS_ERROR;
    				    msg.obj=ex.getMessage().toString();
    				}
    				finally{
    					handler.sendMessage(msg);
    				}
    			}
    		}.start();
    	}
    	
    	public void get3(final String api,final ConnInternetCallback callBack) {
    		final Handler handler=getHandle(api, callBack);
    		new Thread(){
    			@Override
    			public void run() {
    				Message msg=handler.obtainMessage(HTTP_STATUS_START, "開始连接");
    				try {
    					HttpGet httpGet=new HttpGet(api);
    					HttpClient httpClient = new DefaultHttpClient();
    					HttpResponse httpResp = httpClient.execute(httpGet);
    
    					int resCode=httpResp.getStatusLine().getStatusCode();
    					if(resCode!=HTTP_STATUS_REULTOK){
    						msg.what=HTTP_STATUS_NORESP;
    						msg.obj=resCode;
    						handler.sendMessage(msg);
    						return ;
    					}
    					msg.what=HTTP_STATUS_REULTOK;
    					msg.obj= EntityUtils.toString(httpResp.getEntity());
    					
    				}catch (Exception e) {
    					msg.what=HTTP_STATUS_ERROR;
    					msg.obj= e.getMessage();
    				}
    				finally{
    					handler.sendMessage(msg);
    				}
    			}
    		}.start();
    	}
    	
    	private static Handler getHandle(final String api,final ConnInternetCallback callBack){
    		return new Handler() {
    			@Override
    			public void handleMessage(Message message) {
    				//不 在 这里写!
    				callBack.callBack(message.what,api, message.obj.toString());
    			}
    		};
    	}
    
    	/**
    	 * 简单类型,仅仅进行文字信息的POST;
    	 * @param api api地址
    	 * @param params 仅字段參数
    	 * @param callBack 返回调用;
    	 */
    	public static void post1(final String api,final HashMap<String,String> params,final ConnInternetCallback callBack){
    		final Handler handler=getHandle(api, callBack);
    		new Thread(){
    			@Override
    			public void run() {
    				Message msg=handler.obtainMessage(HTTP_STATUS_START,"開始连接");
    				try {
    					URL url=new URL(api);
    					HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    					urlConn.setDoInput(true);
    					urlConn.setDoOutput(true);
    					urlConn.setRequestMethod("POST");
    					urlConn.setUseCaches(false);
    					urlConn.setInstanceFollowRedirects(true);
    					urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    					urlConn.setRequestProperty("Charset", "UTF-8");
    					
    					urlConn.connect();
    		            DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  
    		            Iterator<String> iterator=params.keySet().iterator();
    		            while(iterator.hasNext()){
    		            	String key= iterator.next();
    		            	String value= URLEncoder.encode(params.get(key),"UTF-8");
    		            	out.write((key+"="+value+"&").getBytes()); 
    		             }
    		            out.flush();  
    		            out.close();  
    		            
    		        	int resCode=urlConn.getResponseCode();
    					if(resCode!=HTTP_STATUS_REULTOK){
    						msg.what=HTTP_STATUS_NORESP;
    						msg.obj=resCode;
    						handler.sendMessage(msg);
    						return ;
    					}
    		            String result="";
    		            String readLine=null;
    		            InputStreamReader inputStream=new InputStreamReader(urlConn.getInputStream());
    		            BufferedReader bufferReader=new BufferedReader(inputStream);
    		            while((readLine=bufferReader.readLine())!=null){
    		            	result+=readLine;
    		            }
    		            msg.what=HTTP_STATUS_REULTOK;
    			        msg.obj=URLDecoder.decode(result,"UTF-8");
    		            inputStream.close();
    		            bufferReader.close();
    		            urlConn.disconnect();
    				}catch(Exception ex){
    					msg.what=HTTP_STATUS_ERROR;
    				    msg.obj=ex.getMessage().toString()+".";
    				}
    				finally{
    		            handler.sendMessage(msg);
    				}
    			}
    		}.start();
    	}
    
    	/**
    	 * 自己定义文字和文件传输协议[演示样例在函数结尾];
    	 * @param apiUrl api地址
    	 * @param mapParams 文字字段參数
    	 * @param listUpFiles 多文件參数
    	 * @param callBack 返回调用;
    	 */
    	public static void post2(final String apiUrl,final HashMap<String,String> mapParams,final ArrayList<ConnInternetUploadFile> listUpFiles,ConnInternetCallback callBack){
    		final Handler handler=getHandle(apiUrl, callBack);
    		new Thread(new Runnable() {
    			public void run() {
    				Message msg=handler.obtainMessage(HTTP_STATUS_START, "開始连接");
    				
    				String BOUNDARY="———7d4a6454354fe54scd";
    				String PREFIX="--";
    				String LINE_END="
    ";
    				
    				try{
    					URL url=new URL(apiUrl);
    					HttpURLConnection urlConn=(HttpURLConnection) url.openConnection();
    					urlConn.setDoOutput(true);
    					urlConn.setDoInput(true);
    					urlConn.setUseCaches(false);
    					urlConn.setRequestMethod("POST");
    					urlConn.setRequestProperty("Connection", "Keep-Alive");
    					urlConn.setRequestProperty("Charset", "UTF-8");
    					urlConn.setRequestProperty("Content-Type","multipart/form-data ;boundary="+BOUNDARY);
    					
    					DataOutputStream outStream=new DataOutputStream(urlConn.getOutputStream());
    
    					for(Map.Entry<String,String> entry:mapParams.entrySet()){
    						StringBuilder sbParam=new StringBuilder();
    						sbParam.append(PREFIX);
    						sbParam.append(BOUNDARY);
    						sbParam.append(LINE_END);
    						sbParam.append("Content-Disposition:form-data;name=""+ entry.getKey()+"""+LINE_END);
    						sbParam.append("Content-Transfer-Encoding: 8bit" + LINE_END);
    						sbParam.append(LINE_END);
    						sbParam.append(entry.getValue());
    						sbParam.append(LINE_END);
    						outStream.write(sbParam.toString().getBytes());
    					}
    					
    					for(ConnInternetUploadFile file:listUpFiles){
    						StringBuilder sbFile=new StringBuilder();
    						sbFile.append(PREFIX);
    						sbFile.append(BOUNDARY);
    						sbFile.append(LINE_END);
    						sbFile.append("Content-Disposition:form-data;name=""+file.getFormname()+"";filename=""+file.getFileName()+"""+LINE_END);
    						sbFile.append("Content-type:"+file.getContentType()+"""+LINE_END);
    						outStream.write(sbFile.toString().getBytes());
    						writeFileToOutStream(outStream,file.getFileUrl());
    						outStream.write(LINE_END.getBytes("UTF-8"));
    					}
    					
    					byte[] end_data=(PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes("UTF-8");
    					outStream.write(end_data);
    					outStream.flush();
    					outStream.close();  
    		        
    					int resCode=urlConn.getResponseCode();
    					if(resCode!=HTTP_STATUS_REULTOK){
    						msg.what=HTTP_STATUS_NORESP;
    						msg.obj=resCode;
    						handler.sendMessage(msg);
    						return ;
    					}
    		            String result="";
    		            String readLine=null;
    		            InputStreamReader inputStream=new InputStreamReader(urlConn.getInputStream());
    		            BufferedReader bufferReader=new BufferedReader(inputStream);
    		            while((readLine=bufferReader.readLine())!=null){
    		            	result+=readLine;
    		            }
    		            msg.what=HTTP_STATUS_REULTOK;
    			        msg.obj=URLDecoder.decode(result,"UTF-8");
    			        inputStream.close();
    		            bufferReader.close();
    		            urlConn.disconnect();
    				}catch(Exception ex){
    					msg.what=HTTP_STATUS_ERROR;
    				    msg.obj=ex.getMessage().toString();
    				}
    				finally{
    		            handler.sendMessage(msg);
    				}
    			}
    		}).start();
    //		HashMap<String,String> params=new HashMap<String, String>();
    //		params.put("pid", fileHelper.getShareProf("PassportId"));
    //		params.put("json",postJson(text));
    		
    //		ArrayList<UploadFile> uploadFiles=new ArrayList<UploadFile>();
    //		if(url.length()>0){
    //			UploadFile upfile=new UploadFile(url,url,"Images");
    //			uploadFiles.add(upfile);
    //		}
    //		Internet.post(Api.api_messageCreate, params,uploadFiles,new InternetCallback() {
    //			@Override
    //			public void callBack(int msgWhat, String api, String result) {
    //				if(msgWhat==Internet.HTTP_STATUS_OK){
    //					//跟新数据
    //					adapter.notifyDataSetChanged();
    //					//显示没有数据
    //				}else showToast("网络错误");
    //			}
    //		});
    	}
    	
    	/**
    	 * 第三方Apache集成POST
    	 * @param url api地址
    	 * @param mapParams 參数
    	 * @param callBack
    	 */
    	public static void post3(final String url, final HashMap<String,String> mapParams,final HashMap<String,String> mapFileInfo,ConnInternetCallback callBack) {
    		final Handler handler=getHandle(url	, callBack);
    		new Thread() {
    			@Override
    			public void run() {
    				Message msg=handler.obtainMessage(HTTP_STATUS_START, "開始连接");
    				try {
    					HttpPost httpPost = new HttpPost(url);
    			        //多类型;
    					MultipartEntity multipartEntity = new MultipartEntity();  
    			        //字段
    			        Iterator<?

    > it=mapParams.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); String value=mapParams.get(key); multipartEntity.addPart(key,new StringBody(value,Charset.forName("UTF-8"))); } //文件 it=mapFileInfo.keySet().iterator(); while(it.hasNext()){ String key=(String)it.next(); String value=mapFileInfo.get(key); multipartEntity.addPart(key, new FileBody(new File(value))); } httpPost.setEntity(multipartEntity); HttpClient httpClient = new DefaultHttpClient(); HttpResponse httpResp = httpClient.execute(httpPost); int resCode=httpResp.getStatusLine().getStatusCode(); if(resCode!=HTTP_STATUS_REULTOK){ msg.what=HTTP_STATUS_NORESP; msg.obj=resCode; handler.sendMessage(msg); return ; } msg.what=HTTP_STATUS_REULTOK; msg.obj= EntityUtils.toString(httpResp.getEntity()); }catch (Exception e) { msg.what=HTTP_STATUS_ERROR; msg.obj= e.getMessage(); } finally{ handler.sendMessage(msg); } } }.start(); } public static Bitmap loadBitmapFromNet(String imgUrl,BitmapFactory.Options options){ Bitmap bitmap = null; URL imageUrl = null; if (imgUrl == null || imgUrl.length() == 0) return null; try { imageUrl = new URL(imgUrl); URLConnection conn = imageUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); int length = conn.getContentLength(); if (length != -1) { byte[] imgData = new byte[length]; byte[] temp = new byte[512]; int readLen = 0; int destPos = 0; while ((readLen = is.read(temp)) != -1) { System.arraycopy(temp, 0, imgData, destPos, readLen); destPos += readLen; } bitmap = BitmapFactory.decodeByteArray(imgData, 0, imgData.length,options); options.inJustDecodeBounds=false; bitmap = BitmapFactory.decodeByteArray(imgData, 0, imgData.length,options); } } catch (IOException e) { return null; } return bitmap; } public static void writeFileToOutStream(DataOutputStream outStream,String url){ try { InputStream inputStream = new FileInputStream(new File(url)); int ch; while((ch=inputStream.read())!=-1){ outStream.write(ch); } inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } public interface ConnInternetCallback{ public void callBack(int msgWhat,String api,String result); } public class ConnInternetUploadFile { private String filename; private String fileUrl; private String formname; private String contentType = "application/octet-stream"; //image/jpeg public ConnInternetUploadFile(String filename, String fileUrl, String formname) { this.filename = filename; this.fileUrl=fileUrl; this.formname = formname; } public String getFileUrl() { return fileUrl; } public void setFileUrl(String url) { this.fileUrl=url; } public String getFileName() { return filename; } public void setFileName(String filename) { this.filename = filename; } public String getFormname() { return formname; } public void setFormname(String formname) { this.formname = formname; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } } }


  • 相关阅读:
    从csv文件里取数据作为请求参数,和把返回数据放到一个csv文件
    记一次if控制器的使用
    记一次使用正则表达式+foreach控制器调试
    获取随机数用作入参使用
    获取返回结果作为参数并将其设置为全局变量(实现跨线程组使用)
    linux默认的目录结构
    总结fiddler抓https包
    Codeforces Round #733 (Div. 1 + Div. 2) D. Secret Santa
    Codeforces Round #733 (Div. 1 + Div. 2) C. Pursuit
    Codeforces Round #731 (Div. 3) A
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5195261.html
Copyright © 2020-2023  润新知