1. 程式人生 > >在android中使用HTTPClient以post方法傳送二進位制檔案

在android中使用HTTPClient以post方法傳送二進位制檔案

<span style="font-family: Arial, Helvetica, sans-serif;"></span><p>首先,在propotities-> Java build path -> Libraries中add external jars中引入httpclient-4.2.5.jar和httpmime-4.2.5.jar </p><p>然後再將這兩個包拷貝到專案工程下的libs目錄下;</p>
<span style="font-family: Arial, Helvetica, sans-serif;">import java.io.ByteArrayOutputStream;</span>
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.params.HttpClientParams;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

/**
 * HTTP請求輔助類,用於人臉識別過程中向face++傳送請求
 * @author witness
 * 
 */

public class HTTPUtils {


	
		
	private static HttpParams httpParams = new BasicHttpParams();
	private static HttpClient httpClient = getHttpClient();
	
	public static String doGet(String url, Map params){
		String paramStr = "";  
        Iterator iter = params.entrySet().iterator();  
        while (iter.hasNext()) {  
            Map.Entry entry = (Map.Entry) iter.next();  
            Object key = entry.getKey();  
            Object val = entry.getValue();  
            paramStr += paramStr = "&" + key + "=" + val;  
        }  
//        if (!paramStr.equals("")) {  
//            paramStr = paramStr.replaceFirst("&", "?");  
//            url += paramStr;  
//        }  
        HttpGet httpRequest = new HttpGet(url);  
        String strResult = "doGetError";  
        try {  
            /* 傳送請求並等待響應 */  
            HttpResponse httpResponse = httpClient.execute(httpRequest);  
            /* 若狀態碼為200 ok */  
            if (httpResponse.getStatusLine().getStatusCode() == 200) {  
                /* 讀返回資料 */  
                strResult = EntityUtils.toString(httpResponse.getEntity());  
            } else {  
                strResult = "Error Response: "  
                        + httpResponse.getStatusLine().toString();  
            }  
        } catch (ClientProtocolException e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        } catch (IOException e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        } catch (Exception e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        }  
        Log.v("strResult", strResult);  
        return strResult;  
	}
	
	
	@SuppressWarnings("deprecation")
	public static String doPost(String url, byte[] imgData) {  
        /* 建立HTTPPost物件 */  
        HttpPost httpRequest = new HttpPost(url);  
        String strResult = "doPostError";  
        try {  
        	MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            /* 新增請求引數到請求物件 */ 
        	ByteArrayBody img = new ByteArrayBody(imgData, "img");
        	StringBody key = new StringBody(Constants.API_KEY);
        	StringBody secret = new StringBody(Constants.API_SECRET);
        	entity.addPart("img", img);
        	entity.addPart("api_key", key);
        	entity.addPart("api_secret", secret);
            httpRequest.setEntity(entity);  
            /* 傳送請求並等待響應 */  
            HttpResponse httpResponse = httpClient.execute(httpRequest);  
            /* 若狀態碼為200 ok */  
            if (httpResponse.getStatusLine().getStatusCode() == 200) {  
                /* 讀返回資料 */  
                strResult = EntityUtils.toString(httpResponse.getEntity());  
            } else {  
                strResult = "Error Response: "  
                        + httpResponse.getStatusLine().toString();  
            }  
        } catch (ClientProtocolException e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        } catch (IOException e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        } catch (Exception e) {  
            strResult = e.getMessage().toString();  
            e.printStackTrace();  
        }  
        Log.v("strResult", strResult);  
        return strResult;  
    }
	
	private static HttpClient getHttpClient() {  
        // 設定連線超時和 Socket 超時,以及 Socket 快取大小  
        HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);  
        HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);  
        HttpConnectionParams.setSocketBufferSize(httpParams, 8192);  
        // 設定重定向,預設為 true  
        HttpClientParams.setRedirecting(httpParams, true);  
        // 設定 user agent  
        String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";  
        HttpProtocolParams.setUserAgent(httpParams, userAgent);  
        // 建立一個 HttpClient 例項  
        // 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient  
        // 中的用法,在 Android 1.5 中我們需要使用 Apache 的預設實現 DefaultHttpClient  
        httpClient = new DefaultHttpClient(httpParams);  
        return httpClient;  
    }  
	public static byte[] getBitmapByte(Bitmap bitmap){  
	    ByteArrayOutputStream out = new ByteArrayOutputStream();  
	    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);  
	    try {  
	        out.flush();  
	        out.close();  
	    } catch (IOException e) {  
	        e.printStackTrace();  
	    }  
	    return out.toByteArray();  
	}  
	  
	  
	public static Bitmap getBitmapFromByte(byte[] temp){  
	    if(temp != null){  
	        Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);  
	        return bitmap;  
	    }else{  
	        return null;  
	    }  
	}  
}


相關推薦

android使用HTTPClientpost方法傳送二進位制檔案

<span style="font-family: Arial, Helvetica, sans-serif;"></span><p>首先,在propotities-> Java build path -> Libraries

Android使用HttpClientPost、Get請求伺服器傳送資料的方式(普通和json)

HttpParams params = new BasicHttpParams();//建立一個引數物件,用來儲存設定的各個引數 HttpProtocolParams.setContentCharset(params, "UTF-8");// 設定訊息所用的字符集 HttpProtocolParams.s

關於Android呼叫了post方法後貌似沒有執行run方法的解釋及解決辦法

(真糾結,剛剛發了之後才發現排版太亂了,稍作修改再發了哈~) 哎……之前糾結過Handler的執行機制,後來貌似懂了,但是近幾天又被自己的工程繞的好像又不懂了一樣!! 其實之前理解還是對的哈~只是這次的工程裡的各個變數和物件的定義和初始化位置不適當才造成表面上貌似

Android系列之網路(三)----使用HttpClient傳送HTTP請求(分別通過GET和POST方法傳送資料)

 【正文】 在前兩篇文章中,我們學習到了和HTTP相關的基礎知識。文章連結如下: 一、GET和POST的對比: 在漫長的時間當中,其他的方法逐漸的退出了歷史舞臺,最常用的只剩下GET和POST方法。而之前已經講過了通過GET方法獲取資料,今天來學習一下如何分別通過

Python requestjson形式傳送post請求

一個http請求包括三個部分,為別為請求行,請求報頭,訊息主體,類似以下這樣: 請求行 請求報頭 訊息主體 以json串提交資料,編碼格式:application/json 舉例如下: 可以將一json串傳給requests.post()的data引數 #

HttpClientGET、POST方法示例,支援 https

HttpClient中GET、POST方法示例,支援 HTTPS import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList;

servlet表單get和post方法的區別

pos span 轉化 不可見 上傳文件 post div font 支持 Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:1、Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。2、Get

httpclientpost 方法(參數為Map類型)

直接 close 設置 map .config pre 配置 amr public package httpclient;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

AndroidService的使用方法

  目錄 Service 介紹 Service兩種啟動方式 使用 測試 IntentService Activity與Service之間的通訊 繼承Binder類 Messenger AIDL Service 介紹

AndroidViewPager的setOnPageChangeListener方法過時的替代方法

android.support.v4.view包裡的ViewPager可用於實現輪播圖。我們可以用ViewPager.setOnPageChangeListener(ViewPager.OnPageChangeListener)方法監聽其滑動事件,ViewPager.OnPageChangeLi

Android實現震動的方法

實現手機震動其實很簡單,手機震動使用是Vibrator類,然後震動也是需要許可權的,在使用之前在AndroidManifest.xml檔案中新增 <uses-permission android:name="android.permission.VIBRATE"/>

HTTPGET和POST方法的區別

HTTP請求的方法有很多:GET、POST、HEAD、TRACE、OPTIONS等,但是GET和POST是兩個最常用的方法。 GET是最簡單的一種請求方法,其主要功能是從伺服器端獲取使用者所需資源,並將其作為響應返回給客戶端,需要注意的是:GET方法的作用主要用來獲取伺

AndroidLog的常用方法

android.util.Log常用的方法有以下5個:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根據首字母對應VERBOSE,DEBUG,INFO, WARN,ERROR。 1、Log.v 的除錯顏色為黑色的,任何訊息都會輸出,這裡的v代表verbose

Android實現「類方法指令抽取方式」加固方案原理解析

一、前言Android中加固方案一直在進步,因為新的加固方案出來就會被人無情的破解脫殼了,從第一代加固方案落地加密dex檔案,第二代加固方案不落地加密dex檔案,在到第三代加固方案類方法抽取,以後後面的

Android的訊息機制,用Android執行緒間通訊的Message機制,AndroidHandler的使用方法

轉自:http://www.cnblogs.com/-OYK/archive/2011/08/03/2126657.html Android的訊息機制(一)   android 有一種叫訊息佇列的說法,這裡我們可以這樣理解:假如一個隧道就是一個訊息佇列,那麼裡

Flask之處理客戶端通過POST方法傳送的資料

作為一種HTTP請求方法,POST用於向指定的資源提交要被處理的資料。我們在某網站註冊使用者、寫文章等時候,需要將資料儲存在伺服器中,這是一般使用POST方法。 本文使用Python的requests庫模擬客戶端。 建立Flask專案 按照以下命令建立Flask專案H

javahttpclentpost方式提交請求時,http返回碼是302重定向時,不自動跳轉的處理

場景: 介面A:請求地址為http://www.test.com/test 介面A的功能,會把接收到的引數url寫入到header的Location屬性中 在java中,使用httpclient傳送請求, 在以get方式傳送請求時,http的返回碼是200,自動處理了重定

iOS 使用http POST方法傳輸二進位制資料

NSURL *url = [NSURL URLWithString:HEADIMAGE]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url]; [r

jquery ajax post 方法傳送object 的list 資料給後臺

jquery spring rest webservice var featureCodes = []; var objectData = {                     buildEntityNumber: buildEntityNumber,        

HttpClient通過Post方式傳送Json資料

伺服器用的是Springmvc,介面內容: @ResponseBody @RequestMapping(value="/order",method=RequestMethod.POST) public boolean order(HttpServletRequest