當前位置:首頁 » 安卓系統 » httpclientandroid

httpclientandroid

發布時間: 2022-09-10 08:46:01

❶ android的自帶的httpClient 怎麼上傳文件

Android上傳文件到服務端可以使用HttpConnection 上傳文件,也可以使用Android封裝好的HttpClient類。當僅僅上傳文件可以直接使用httpconnection 上傳比較方便快捷。

1、使用HttpConection上傳文件。將文件轉換成表單數據流。主要的思路就自己構造個http協議內容,服務端解析報文獲得表單數據。代碼片段:

[java] view plain
HttpURLConnection con;
try {
con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(C_TimeOut);
/* 允許Input、Output,不使用Cache */
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
/* 設置傳送的method=POST */
con.setRequestMethod("POST");
/* setRequestProperty */
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);

/* 設置DataOutputStream */
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
FileInputStream fStream = new FileInputStream(file);

/* 設置每次寫入1024bytes */
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];

int length = -1;
/* 從文件讀取數據至緩沖區 */
while((length = fStream.read(buffer)) != -1)
{
/* 將資料寫入DataOutputStream中 */
ds.write(buffer, 0, length);
}
fStream.close();
ds.flush();
ds.close();

可以參考

①《在 Android 上通過模擬 HTTP multipart/form-data 請求協議信息實現圖片上傳》 (http://bertlee.iteye.com/blog/1134576)。

②《關於android Http訪問,上傳,用了三個方法 》

2、使用Android HttpClient類上傳參數。下面我在網上搜到得代碼,忘記出處了

[java] view plain
private static boolean sendPOSTRequestHttpClient(String path,
Map<String, String> params) throws Exception {
// 封裝請求參數
List<NameValuePair> pair = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
pair.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
}
// 把請求參數變成請求體部分
UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");
// 使用HttpPost對象設置發送的URL路徑
HttpPost post = new HttpPost(path);
// 發送請求體
post.setEntity(uee);
// 創建一個瀏覽器對象,以把POST對象向伺服器發送,並返回響應消息
DefaultHttpClient dhc = new DefaultHttpClient();
HttpResponse response = dhc.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
Log.i("http", "httpclient");
return true;
}
return false;
}

3、使用httpClient上傳文字信息和文件信息。使用httpClient上傳文件非常的方便。不過需要導入apache-mime4j-0.6.jar 和httpmime-4.0.jar兩個.jar包。

[java] view plain
// 封裝請求參數
MultipartEntity mpEntity = new MultipartEntity();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {

StringBody par = new StringBody(entry.getValue());
mpEntity.addPart(entry.getKey(), par);
}
}
// 圖片
if (!imagepath.equals("")) {
FileBody file = new FileBody(new File(imagepath));
mpEntity.addPart("photo", file);
}
// 使用HttpPost對象設置發送的URL路徑
HttpPost post = new HttpPost(path);
// 發送請求體
post.setEntity(mpEntity);
// 創建一個瀏覽器對象,以把POST對象向伺服器發送,並返回響應消息
DefaultHttpClient dhc = new DefaultHttpClient();
HttpResponse response = dhc.execute(post);

FileBody類可以把文件封裝到表單中,實現附件的上傳。

關於httpClient上傳文件可以參考鏈接: http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76721&page=1

需要用的的ja下載地址r:http://download.csdn.net/detail/china1988s/3791514

參考:

①《在 Android 上通過模擬 HTTP multipart/form-data 請求協議信息實現圖片上傳》 (http://bertlee.iteye.com/blog/1134576)。

②《關於android Http訪問,上傳,用了三個方法 》

❷ Apache HttpClient 棄用(Android 9.0)

在 Android 6.0 中, 我們取消了對 Apache HTTP 客戶端的支持 。 從 Android 9 開始,默認情況下該內容庫已從 bootclasspath 中移除且不可用於應用。

要繼續使用 Apache HTTP 客戶端,以 Android 9 及更高版本為目標的應用可以向其 AndroidManifest.xml 添加以下內容:
注意:這個要放在application的節點下面

註:擁有最低 SDK 版本 23 或更低版本的應用需要 android:required="false" 屬性,因為在 API 級別低於 24 的設備上,org.apache.http.legacy 庫不可用。 (在這些設備上,Apache HTTP 類在 bootclasspath 中提供。)

作為使用運行時 Apache 庫的替代,應用可以在其 APK 中綁定自己的 org.apache.http 庫版本。 如果進行此操作,您必須將該庫重新打包(使用一個類似 Jar Jar 的實用程序)以避免運行時中提供的類存在類兼容性問題。

❸ android裡面可以使用HttpClient么

Android有一個AndroidHttpClient,實現了HttpClient介面,但是已經標記為Deprecated,不鼓勵使用了。因為Android鼓勵開發者使用HttpURLConnection這一套(在java.net包名下)。在Android blog官網上有專門說過原因,感興趣你可以搜一下。基本意思就是HttpURLConnection在Android下針對手機環境做過一些優化,而AndroidHttpClient已經不再維護。

❹ httpclient android 怎麼使用

/**
* 通過Put方式發送請求 更新採集器信息
* @param url URL地址
* @param params 參數
* @return
* @throws Exception
*/
public String httpPut(String json,String url, List<Parameter> params, String tokenAuth,int type) throws Exception
{
String response = null;
int timeoutConnection = YunTongXun.httpclienttime;
int timeoutSocket = YunTongXun.httpclienttime;
HttpParams httpParameters = new BasicHttpParams();// Set the timeout in milliseconds until a connection is established.
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);// Set the default socket timeout (SO_TIMEOUT) // in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// 構造HttpClient的實例
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPut httpPost = new HttpPut(url);
if (params.size()>=0)
{

//設置httpPost請求參數
if(type==2)
{
String jsstr = "[{";
for (Parameter param : params)
{
jsstr += "\"" + param.getName() +"\":" + param.getValue() + ",";
}
jsstr = jsstr.substring(0,jsstr.length()-1);
jsstr +="}]";
if(json!=null)
{
jsstr = json;
}
System.out.println(jsstr);
StringEntity s = new StringEntity(jsstr ,"utf-8");
s.setContentEncoding("UTF-8");
s.setContentType("text/json");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(s);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type","application/json;charset=UTF-8");

}
else if(type==3)
{
boolean isLock = false,hasMutiDistance = false;
String blowerIds = "";
String distances = "";
for (Parameter param : params)
{
if(param.getName().equals("distance"))
{
if(param.getValue().split(",").length>1)
{
distances = param.getValue();
hasMutiDistance = true;
}
}
else if(param.getName().equals("lock"))
{
if(param.getValue().length()>2)
{
blowerIds = param.getValue();
isLock = true;
}
}
else if(param.getName().equals("unlock"))
{
if(param.getValue().length()>2)
{
blowerIds = param.getValue();
isLock = false;
}
}

}

if(!hasMutiDistance)
{
String jsstr = "[{";
for (Parameter param : params)
{
jsstr += "\"" + param.getName() +"\":" + param.getValue() + ",";
}
jsstr = jsstr.substring(0,jsstr.length()-1);
jsstr +="}]";
StringEntity s = new StringEntity(jsstr ,"utf-8");
s.setContentEncoding("UTF-8");
s.setContentType("text/json");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(s);
}
else
{
String jsstr = "[";
int i =0;
blowerIds = blowerIds.replace("[", "").replace("]", "");
for(String dis : distances.split(","))
{
if(isLock)
{
jsstr += "{\"distance\":" + dis + ",\"lock\":[" + blowerIds.split(",")[i] + "],\"unlock\":[]},";
}
else
{
jsstr += "{\"distance\":" + dis + ",\"unlock\":[" + blowerIds.split(",")[i] + "],\"lock\":[]},";
}
i++;
}
jsstr = jsstr.substring(0,jsstr.length()-1);
jsstr +="]";
System.out.println(jsstr);
StringEntity s = new StringEntity(jsstr ,"utf-8");
s.setContentEncoding("UTF-8");
s.setContentType("text/json");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(s);
}
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
}

else if(type ==1)
{
httpPost.setEntity(new UrlEncodedFormEntity(buildNameValuePair(params),HTTP.UTF_8));
}
}
if(tokenAuth != null)
httpPost.setHeader("Authorization", tokenAuth);
//使用execute方法發送HTTP Post請求,並返回HttpResponse對象
HttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(statusCode==HttpStatus.SC_CREATED || statusCode == HttpStatus.SC_OK)
{
//獲得返回結果
response = EntityUtils.toString(httpResponse.getEntity(),"utf-8");

if(response==null || response.length()<2)
{
System.out.println("{status_code:"+statusCode+"}");
return "{status_code:"+statusCode+"}";
}
}
else
{
response = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
System.out.println(response);
System.out.println("{status_code:"+statusCode+"}");
return "{status_code:"+statusCode+"}";
}
return response;
}

❺ 用android的httpclient抓網頁(GET)有的可以,有的網頁抓不到,請求頭設置了。

可使用android自帶的httpclient框架實現。

1. GET 方式傳遞參數
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "數據")); //增加參數1
params.add(new BasicNameValuePair("param2", "value2"));//增加參數2
String param = URLEncodedUtils.format(params, "UTF-8");//對參數編碼
String baseUrl = "伺服器介面完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//將URL與參數拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

2. POST方式 方式傳遞參數
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));//增加參數1
params.add(new BasicNameValuePair("param2", "第二個參數"));//增加參數2
try {
HttpPost postMethod = new HttpPost(baseUrl);//創建一個post請求
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

❻ Android HttpClient怎麼報

HttpClient在Android 6.0之後被谷歌廢棄取消使用了
HttpClient適合在2.3之前的版本,而HttpURLConnection一直在優化,更輕量,效果更好,適合3.0以後的版本
目前谷歌建議使用HttpURLConnection請求網路,或者使用OkHttp來請求網路

❼ android httpclient怎麼接收json數據

android裡面,通過json數據是不會直接返回圖片的,只會返回圖片的url地址。
步驟: 1,通過解析json數據,獲取到圖片的地址。
2,通過圖片的地址,再一次的請求網路(用非同步任務或者hangdler裡面請求網路:比如:
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
BufferedInputStream is = new BufferedInputStream(conn.getInputStream());


3 通過BitmapFactory.decodeStream(裡面的參數是一個位元組流),該方法返回的是一個bitmap ,直接用imageview.setimagebitmap()就能展示圖片了。
說明: 在BitmapFactory.decodeStream這里返回的bitmap可以做進一步的優化,比如二次采樣,把獲取的bitmap存sd卡等等。。

❽ 如何在Android開發中用HttpClient連接網路數據

HttpClient網路訪問

一、HttpClient網路訪問:
(一)、簡介:
1、Apache組織提供了HttpClient項目,可以實現網路訪問。在Android中,成功集成了HttpClient,所以在Android中可以直接使用HttpClient訪問網路。

2、與HttpURLConnection相比,HttpClient將前者中的輸入、輸出流操作,統一封裝成HttpGet、HttpPost、HttpRequest類。

HttpClient:網路連接對象;
HttpGet:代表發送GET請求;
HttpPost:代表發送POST請求;
HttpResponse:代表處理伺服器響應的對象。
HttpEntity對象:該對象中包含了伺服器所有的返回內容。
3、使用步驟:(六部曲)【重點】
創建HttpClient對象:通過實例化DefaultHttpClient獲得;
創建HttpGet或HttpPost對象:通過實例化 HttpGet或HttpPost 獲得,而構造方法的參數是urlstring(即需要訪問的網路url地址)。也可以通過調用setParams()方法來添加請求參數;
調用HttpClient對象的execute()方法,參數是剛才創建的 HttpGet或HttpPost對象 ,返回值是HttpResponse對象;
通過response對象中的getStatusLine()方法和getStatusCode()方法獲取伺服器響應狀態是否是200。
調用 HttpResponse對象的getEntity()方法,返回HttpEntity對象。而該對象中包含了伺服器所有的返回內容。
藉助EntityUtils的toString()方法或toByteArray()對 HttpEntity對象進行處理,也可以通過IO流對 HttpEntity對象進行操作。

(二)、封裝HttpClientHelper工具類:

public class HttpClientHelper {
public static HttpClient checkNetwork(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(request);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
return httpClient;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:實現網路訪問文件,將獲取到數據儲存在文件流中
*
* @param url
* :訪問網路的url地址
* @return inputstream
*/
public static InputStream loadFileFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
HttpResponse httpResponse;
try {
httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = httpResponse.getEntity();
return entity.getContent();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:實現網路訪問文件,將獲取到的數據存在位元組數組中
*
* @param url
* :訪問網路的url地址
* @return byte[]
*/
public static byte[] loadByteFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("====>" + e.toString());
}
return null;
}

/**
* 作用:實現網路訪問文件,返回字元串
*
* @param url
* :訪問網路的url地址
* @return String
*/
public static String loadTextFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toString(httpEntity, "utf-8");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:實現網路訪問文件,先給伺服器通過「GET」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* String url:訪問url時,需要傳遞給伺服器的參數。
* 第二個參數格式為:username=wangxiangjun&password=123456
* @return byte[]
*/
public static byte[] doGetSubmit(String url, String params) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url + "?" + params);
try {
HttpResponse httpResponse = httpClient.execute(requestGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:實現網路訪問文件,先給伺服器通過「POST」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* String url:訪問url時,需要傳遞給伺服器的參數。 第二個參數為:List<NameValuePair>
* @return byte[]
*/
public static byte[] doPostSubmit(String url, List<NameValuePair> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);
try {
requestPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpClient.execute(requestPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 作用:實現網路訪問文件,先給伺服器通過「POST」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* String url:訪問url時,需要傳遞給伺服器的參數。 Map<String , Object>
* @return byte[]
*/
public static byte[] doPostSubmit(String url, Map<String, Object> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);

List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
try {
if (params != null) {
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
BasicNameValuePair nameValuePair = new BasicNameValuePair(
key, value);
parameters.add(nameValuePair);
}
}
requestPost
.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
HttpResponse httpResponse = httpClient.execute(requestPost);

if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toByteArray(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

熱點內容
php數組計數 發布:2025-01-10 14:23:03 瀏覽:472
s盒演算法 發布:2025-01-10 14:16:42 瀏覽:640
c語言用二分法求方程 發布:2025-01-10 14:15:45 瀏覽:218
廣場舞加密 發布:2025-01-10 14:13:21 瀏覽:519
網路密碼顯示低安全性是什麼意思 發布:2025-01-10 14:11:49 瀏覽:780
恥辱2博士保險箱密碼是多少 發布:2025-01-10 14:11:41 瀏覽:98
如何把伺服器搭在自己電腦 發布:2025-01-10 14:10:57 瀏覽:583
水晶可以存儲 發布:2025-01-10 14:09:35 瀏覽:388
一級腳本號 發布:2025-01-10 14:08:06 瀏覽:531
知乎冷數據存儲 發布:2025-01-10 14:07:10 瀏覽:603