androidhttppost
『壹』 android程序發送HttpPost請求訪問https
獲取數據從網路運營商進入一個線程執行,不會有什麼變化異常。 ,BroadcastReceiver的,因為Android系統默認的處理時間為10秒,如果10秒還沒有完成,它會報告超時異常!
『貳』 Android中使用HttpPost實現數據與文件同時上傳的功能
第一步:編寫一個Servlet,把接收到的HTTP信息保存在一個文件中,代碼如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//獲取輸入流,是HTTP協議中的實體內容
ServletInputStream sis=request.getInputStream();
//緩沖區
byte buffer[]=new byte[1024];
FileOutputStream fos=new FileOutputStream("d://file.log");
int len=sis.read(buffer, 0, 1024);
//把流里的信息循環讀入到file.log文件中
while( len!=-1 )
{
fos.write(buffer, 0, len);
len=sis.readLine(buffer, 0, 1024);
}
fos.close();
sis.close();
}
第二步:實現如下圖1的的表單頁面,生成一個注冊表單,提交到Servlet中
詳細的代碼如下:
<form action="servlet/ReceiveFile" method="post" enctype="multipart/form-data">
第一個參數<input type="text" name="name1"/> <br/>
第二個參數<input type="text" name="name2"/> <br/>
第一個上傳的文件<input type="file" name="file1"/> <br/>
第二個上傳的文件<input type="file" name="file2"/> <br/>
<input type="submit" value="提交">
</form>
注意了,由於要上傳附件,所以一定要設置enctype為multipart/form-data,才可以實現附件的上傳。
第三步:填寫完信息後按「提交」按鈕後,在D盤下查找file.log文件用記事本打開,數據如下:
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="name1"
hello
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="name2"
world
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="file1"; filename="C:/2.GIF"
Content-Type: image/gif
GIF89a
『叄』 android http post 請求怎麼寫,我返回的結果不正確
HTTP錯誤405 – 禁止訪問資源. 可能是server端有訪問設置.你可以問下做server的人. 或者換一個server做下測試,看到底是server的問題,還是你代碼的問題.
java">packagejusi.singporecameratest;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.protocol.HTTP;
importorg.apache.http.util.EntityUtils;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.widget.TextView;
{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
DefaultHttpClienthttpClient=newDefaultHttpClient();
Stringurl="http://appschallenge.juzz4.com/api/login";
HttpPosthttppost=newHttpPost(url);
httppost.setHeader("Content-Type","application/x-www-form-urlencoded");
List<NameValuePair>list=newArrayList<NameValuePair>();
list.add(newBasicNameValuePair("username","demo"));
list.add(newBasicNameValuePair("password","demo"));
list.add(newBasicNameValuePair("mechanism","plain"));
Stringstr=null;
try{
httppost.setEntity(newUrlEncodedFormEntity(list,HTTP.UTF_8));
HttpResponseresponse=httpClient.execute(httppost);
str=EntityUtils.toString(response.getEntity());
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//取得HTTPresponse
catch(ClientProtocolExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
『肆』 android通過http post實現文件下載
可參照我的如下代碼
java.io.OutputStreamos=null;
java.io.InputStreamis=null;
try{
java.io.Filefile=newjava.io.File(str_local_file_path);
if(file.exists()&&file.length()>0){
}else{
file.createNewFile();
java.net.URLurl=newjava.net.URL(str_url);
java.net.HttpURLConnectionconn=(java.net.HttpURLConnection)url.openConnection();
os=newjava.io.FileOutputStream(file);
is=conn.getInputStream();
byte[]buffer=newbyte[1024*4];
intn_rx=0;
while((n_rx=is.read(buffer))>0){
os.write(buffer,0,n_rx);
}
}
returntrue;
}catch(MalformedURLExceptione){
}catch(IOExceptione){
}finally{
os.flush();
os.close();
is.close();
}
returnfalse;
『伍』 怎樣實現android http-post方法實例說明
代碼如下:
package com.hl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SimplePOST extends Activity {
private TextView show;
private EditText txt;
private Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show = (TextView)findViewById(R.id.show);
txt = (EditText)findViewById(R.id.txt);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dopost(txt.getText().toString());
}
});
}
private void dopost(String val){
//封裝數據
Map<String, String> parmas = new HashMap<String, String>();
parmas.put("name", val);
DefaultHttpClient client = new DefaultHttpClient();//http客戶端
HttpPost httpPost = new HttpPost("http://mhycoe.com/test/post.php");
ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
if(parmas != null){
Set<String> keys = parmas.keySet();
for(Iterator<String> i = keys.iterator(); i.hasNext();) {
String key = (String)i.next();
pairs.add(new BasicNameValuePair(key, parmas.get(key)));
}
}
try {
UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(pairs, "utf-8");
/*
* 將POST數據放入HTTP請求
*/
httpPost.setEntity(p_entity);
/*
* 發出實際的HTTP POST請求
*/
HttpResponse response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
String returnConnection = convertStreamToString(content);
show.setText(returnConnection);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
『陸』 安卓開發 http中get和post的區別
(一)HttpGet :doGet()方法
//doGet():將參數的鍵值對附加在url後面來傳遞
[java] view
plain
public String getResultForHttpGet(String name,String pwd) throws ClientProtocolException, IOException{
//伺服器 :伺服器項目 :servlet名稱
String path="http://192.168.5.21:8080/test/test";
String uri=path+"?name="+name+"&pwd="+pwd;
//name:伺服器端的用戶名,pwd:伺服器端的密碼
//注意字元串連接時不能帶空格
String result="";
HttpGet httpGet=new HttpGet(uri);//編者按:與HttpPost區別所在,這里是將參數在地址中傳遞
HttpResponse response=new DefaultHttpClient().execute(httpGet);
if(response.getStatusLine().getStatusCode()==200){
HttpEntity entity=response.getEntity();
result=EntityUtils.toString(entity, HTTP.UTF_8);
}
return result;
}
(二)HttpPost :doPost()方法
//doPost():將參數打包到http報頭中傳遞
[java] view
plain
public String getReultForHttpPost(String name,String pwd) throws ClientProtocolException, IOException{
//伺服器 :伺服器項目 :servlet名稱
String path="http://192.168.5.21:8080/test/test";
HttpPost httpPost=new HttpPost(path);
List<NameValuePair>list=new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("name", name));
list.add(new BasicNameValuePair("pwd", pwd));
httpPost.setEntity(new UrlEncodedFormEntity(list,HTTP.UTF_8));//編者按:與HttpGet區別所在,這里是將參數用List傳遞
String result="";
HttpResponse response=new DefaultHttpClient().execute(httpPost);
if(response.getStatusLine().getStatusCode()==200){
HttpEntity entity=response.getEntity();
result=EntityUtils.toString(entity, HTTP.UTF_8);
}
return result;
}
-------------------------------------------------------------------------------------------------------
由此我們可知,HttpGet和HttpPost的區別在於前者是將參數在地址中傳遞,後者是將參數用List傳遞。
『柒』 求教android中,在使用HttpPost類的時候,在新建的時候一直都在報錯
我自己寫的自己在用的一個HttpRequestHelper類
/**
* @param HttpPost
* @return HttpRespone
* Describe 用於發送HttpPost請求
*/
public HttpResponse HttpRequestPost(HttpPost postRequest) throws IOException {
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(postRequest);
return response;
}
/**
* @param String url
* @param List<headers>
* @param List<BasciNameValuePair>
* @return HttpPost
* Describe HttpPost構造的一種重載
*/
public HttpPost BuildHttpPostRequest(String url,List<org.apache.http.Header> headers,List<BasicNameValuePair> postDatas) throws IOException {
HttpPost postRequest = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (org.apache.http.Header h : headers) {
postRequest.addHeader(h);
}
for (BasicNameValuePair vp : postDatas) {
nvps.add(vp);
}
postRequest.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
return postRequest;
}
使用的例子
Public HttpResponse Demo(){
List<org.apache.http.Header> headers = new ...
List<BasicNameValuePari> postDatas = new...
headers.add(new BasicHeader("xxx","xxx"));
.
.
.
postDatas.add(new BasicNameValuePair("xxx","xxx"));
.
.
.
HttpRequestHelper helper = new ..
HttpPost post = helper.BuildHttpPostRequest(URL,headers,postDatas);
HttpResponse response = helper.HttpRequestPost(post);
return reponse;
}
『捌』 Android HTTP Post請求錯誤400
你確定你的post方法調用的url沒問題嗎?參數的名稱和個數也沒問題嗎?
『玖』 android httppost類在哪
雖然在登錄系統中使用了Web Service與服務端進行交互。但是在傳遞大量的數量時,Web Service顯得有些笨拙。在本節將介紹移動電子相冊中使用的另外一種與資料庫交互的方法。直接發送HTTP GET或POST請求。這就要用到HttpGet、HttpPost以及HttpURLConnection這些類。
15.3.1 HttpGet類和HttpPost類
本節將介紹Android SDK集成的Apache HttpClient模塊。要注意的是,這里的Apache HttpClient模塊是HttpClient 4.0(org.apache.http.*),而不是Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。
在HttpClient模塊中用到了兩個重要的類:HttpGet和HttpPost。這兩個類分別用來提交HTTP GET和HTTP POST請求。為了測試本節的例子,需要先編寫一個Servlet程序,用來接收HTTP GET和HTTP POST請求。讀者也可以使用其他服務端的資源來測試本節的例子。
假設192.168.17.81是本機的IP,客戶端可以通過如下的URL來訪問服務端的資源:
http://192.168.17.81:8080/querybooks/QueryServlet?bookname=開發
在這里bookname是QueryServlet的請求參數,表示圖書名,通過該參數來查詢圖書信息。
現在我們要通過HttpGet和HttpPost類向QueryServlet提交請求信息,並將返回結果顯示在TextView組件中。
無論是使用HttpGet,還是使用HttpPost,都必須通過如下3步來訪問HTTP資源。
1.創建HttpGet或HttpPost對象,將要請求的URL通過構造方法傳入HttpGet或HttpPost對象。
2.使用DefaultHttpClient類的execute方法發送HTTP GET或HTTP POST請求,並返回HttpResponse對象。
3.通過HttpResponse介面的getEntity方法返回響應信息,並進行相應的處理。
『拾』 android OKhttp 非同步POST請求
可以採用okGo 開實現,
OkGo.<String>post(BASEURL + "/test/deviceInfo")
.upJson(jsonObject)
.execute(callback);
然後在
@Override
public void onSuccess(Response<String> response) {} 內進行處理