导航:首页 > 操作系统 > androidhttp表单提交数据

androidhttp表单提交数据

发布时间:2022-09-09 14:56:53

A. 如何在 android 上用 Post 提交大量的数据

在 Android 上用 Post 提交大量的数据方法:
1.Android中实现
activity_main.xml部分
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
android:id="@+id/lblPostResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/butPost"
android:layout_centerHorizontal="true"
android:text="提交结果" />

<Button
android:id="@+id/butPost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="25dp"
android:text="提交测试" />

</RelativeLayout>

//import部分
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Date;
import java.text.SimpleDateFormat;

//public class MainActivity extends Activity 部分
private Button m_butPost;
m_butPost=(Button)findViewById(R.id.butPost);
m_butPost.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
butPost_OnClick(v);
}
});

//提交测试
private void butPost_OnClick(View v){
//请求参数键-值对
String strRecSmsMsg="收短信测试";
//提交
RecSmsToPost(strRecSmsMsg);
openToast("提交测试完成");
}
//收到短信 后 提交
private void RecSmsToPost(String strRecSmsMsg){
String strNowDateTime=getNowDateTime("yyyy-MM-dd|HH:mm:ss");//当前时间
//参数
Map<String,String> params = new HashMap<String,String>();
params.put("RECSMSMSG", strRecSmsMsg);
//params.put("name", "李四");

//服务器请求路径
String strUrlPath = "http://192.168.1.9:80/JJKSms/RecSms.php" +"?DateTime=" + strNowDateTime;
String strResult=HttpUtils.submitPostData(strUrlPath,params, "utf-8");
m_lblPostResult.setText(strResult);

//openToast("提交完成");
}
//获取当前时间
private String getNowDateTime(String strFormat){
if(strFormat==""){
strFormat="yyyy-MM-dd HH:mm:ss";
}
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat(strFormat);//设置日期格式
return df.format(now); // new Date()为获取当前系统时间
}
//弹出消息
private void openToast(String strMsg){
Toast.makeText(this, strMsg, Toast.LENGTH_LONG).show();
}

HttpUtils 类部分
新建 类文件 HttpUtils 其中代码如下:
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.InputStream;
import java.util.Map;
import java.io.IOException;
import java.net.URLEncoder;
import java.io.ByteArrayOutputStream;

public class HttpUtils {
/*
* Function : 发送Post请求到服务器
* Param : params请求体内容,encode编码格式
*/
public static String submitPostData(String strUrlPath,Map<String, String> params, String encode) {

byte[] data = getRequestData(params, encode).toString().getBytes();//获得请求体
try {

//String urlPath = "http://192.168.1.9:80/JJKSms/RecSms.php";
URL url = new URL(strUrlPath);

HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(3000); //设置连接超时时间
httpURLConnection.setDoInput(true); //打开输入流,以便从服务器获取数据
httpURLConnection.setDoOutput(true); //打开输出流,以便向服务器提交数据
httpURLConnection.setRequestMethod("POST"); //设置以Post方式提交数据
httpURLConnection.setUseCaches(false); //使用Post方式不能使用缓存
//设置请求体的类型是文本类型
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));
//获得输出流,向服务器写入数据
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(data);

int response = httpURLConnection.getResponseCode(); //获得服务器的响应码
if(response == HttpURLConnection.HTTP_OK) {
InputStream inptStream = httpURLConnection.getInputStream();
return dealResponseResult(inptStream); //处理服务器的响应结果
}
} catch (IOException e) {
//e.printStackTrace();
return "err: " + e.getMessage().toString();
}
return "-1";
}

/*
* Function : 封装请求体信息
* Param : params请求体内容,encode编码格式
*/
public static StringBuffer getRequestData(Map<String, String> params, String encode) {
StringBuffer stringBuffer = new StringBuffer(); //存储封装好的请求体信息
try {
for(Map.Entry<String, String> entry : params.entrySet()) {
stringBuffer.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1); //删除最后的一个"&"
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer;
}

/*
* Function : 处理服务器的响应结果(将输入流转化成字符串)
* Param : inputStream服务器的响应输入流
*/
public static String dealResponseResult(InputStream inputStream) {
String resultData = null; //存储处理结果
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
try {
while((len = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
resultData = new String(byteArrayOutputStream.toByteArray());
return resultData;
}

}

2.服务器端的准备
在服务器端我采用wamp方式,当然其它方式也可以。 创建RecSms.php 文件 内容如下:
<?php

require_once ('Log/LogHelper.php');

echo "你好" . "post </br>";

foreach($_REQUEST as $k=>$v){
echo $k;echo "--";
echo $v;echo "</br>";
}

WriteLog('你好 RecSms.php ---------');

foreach($_POST as $k=>$v){
WriteLog( $k .'--' .$v);
}
foreach($_GET as $k=>$v){
WriteLog( $k .'--' .$v);
}

?>

将提交的数据写入Log\Log.php文件中。
其中LogHelper.php 为写日志文件,代码文件如下:
<?php

function WriteLog($msg){
$fp = fopen("Log\Log.php", "a");//文件被清空后再写入
if($fp)
{
date_default_timezone_set('asia/chongqing');
$time=date("H:i:s",strtotime("now"));
$flag=fwrite($fp, $time ." ".$msg ." \r\n");
fclose($fp);
}
}
?>

所有代码已写好。
开启 wamp ,在Android中点击 提交测试 则 在Log.php文件写入提交的数据

B. android客户端如何提交表单数据给web服务器

1.服务器端的准备
为了完成该实例,我们需要在服务器端做以下准备工作:
(1)我们需要在MyEclipse中创建一个Web工程,用来模拟服务器端的Web服务,这里,我将该工程命名为了“myhttp”。
(2)修改该工程的“index.jsp”文件,添加两个输入框和一个提交按钮,作为该Web工程的显示页面。运行Tomcat,在浏览器中访问该Web工程,可以看到如图1所示的界面。

Web工程的显示页面
(3)在该Web工程中,创建一个继承自HttpServlet的LoginAction类,并实现其中的doPost()方法,用来响应图1所示页面的用户操作。具体实现如下:

由上述代码可以看出,当我们在图1所示的页面输入用户名“admin”,密码“123”时,点击提交按钮,会得到“Login succeeded!”的提示信息,如图2所示。若用户名、密码错误,则会得到“Login failed!”的提示信息。
2.客户端实现
在Android客户端,我们需要完成的工作是:以POST方式发送用户名密码到上述服务器,并获得服务器的验证信息。
我们分以下几个步骤来完成。
2.1 UI界面
在Android工程中,我们需要完成一个简单的UI界面,用来完成用户名密码的输入、发送POST请求、显示服务器的验证结果,完成后的界面如图3所示。
在MainActivity中,我们需要获取两个EditText控件的输入,“提交”按键的监听,以及服务器验证结果的TextView内容显示。具体实现代码如下:

2.2发送POST请求到服务器
可以看到上述代码中,我们调用了HttpUtils类的静态方法submitPostData()完成了发送POST请求到服务器,并将该方法的返回值(服务器的响应结果)显示在了TextView控件中。

通过以上的代码可以看出,在该方法中,其实完成了3件事:
(1)将用户名密码封装成请求体,这是通过调用getRequestData()方法来实现的(后面会讲到这个方法的具体实现)。
(2)设置HttpURLConnection对象的各种参数(其实是设置HTTP协议请求体的各项参数),然后通过httpURLConnection.getOutputStream()方法获得服务器输出流outputStream,再使用outputStream.write()方法将请求体内容发送给服务器。
(3)判断服务器的响应码,通过httpURLConnection.getInputStream()方法获得服务器的响应输入流,然后再调用dealResponseResult()方法处理服务器的响应结果。
2.3封装请求体
使用POST请求时,POST的参数不是放在URL字符串里,而是放在HTTP请求数据中,所以我们需要对POST的参数进行封装。
针对该实例而言,我们发送的URL请求是:http://192.168.1.101:8080/myhttp/servlet/LoginAction,但是我们需要将POST的参数(也就是username和password)封装到该请求中,形成如下的形式:
2.4处理响应结果
最后,我们再来看一看对服务器返回结果的处理是怎样的。因为在本实例中,服务器的返回结果是字符串“Login succeeded!”或“Login failed!”,所以这里我们需要做的就是将服务器的返回结果输入流转化成字符串。当然了,如果服务器返回的是图片,那么,我们就需要就得到的输入流转化成Bitmap图片了。如下代码是上面代码中用到的dealResponseResult()方法的具体实现。
2.5运行效果

C. 求教android网络使用HTTP的PATCH方法提交数据

[mw_shl_code=java,true]HttpPost httpRequest = new HttpPost(uriAPI); //Post运作传送变数必须用NameValuePair[]阵列储存 List values = new ArrayList(); //在values中添加你的转换成Json后的数据 try{ //发出HTTP request httpRequest.setEntity(new UrlEncodedFormEntity(values, "UTF-8")); //取得HTTP response HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); //若状态为200,则OK if (httpResponse.getStatusLine().getStatusCode() == 200) { // 获得服务器端输出流 return EntityUtils.toString(httpRequest.getEntity()); } }catch(ClientProtocolException e){ e.printStackTrace(); }catch(UnsupportedEncodingException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }[/mw_shl_code]

D. android HttpURLConnection 中post 上传表单,在数据库中最后一个字段出现乱码

是传到服务器,服务器乱码呢,还是存储到客户端数据库中出现乱码呢,你只上个从服务器获取数据这一小段代码根本找不到原因啊,字符编码跟服务器统一一下……最好提交个中文试试。

E. android如何实现图片批量上传

首先,以下架构下的批量文件上传可能会失败或者不会成功:
1.android客户端+springMVC服务端:服务端采用org.springframework.web.multipart.MultipartHttpServletRequest作为批量上传接收类,这种搭配下的批量文件上传会失败,最终服务端只会接受到一个文件,即只会接受到第一个文件。可能因为MultipartHttpServletRequest对servlet原本的HttpServletRequest类进行封装,导致批量上传有问题。
2.android客户端+strutsMVC服务端:
上传成功的方案:
采用android客户端+Servlet(HttpServletRequest)进行文件上传。
Servlet端代码如下:

[java] view plainprint?
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext())
{
FileItem item = (FileItem) itr.next();
if (item.isFormField())
{
System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"));
}
else
{
if (item.getName() != null && !item.getName().equals(""))
{
System.out.println("上传文件的大小:" + item.getSize());
System.out.println("上传文件的类型:" + item.getContentType());
// item.getName()返回上传文件在客户端的完整路径名称
System.out.println("上传文件的名称:" + item.getName());

File tempFile = new File(item.getName());
// 上传文件的保存路径
File file = new File(sc.getRealPath("/") + savePath, tempFile.getName());
item.write(file);
request.setAttribute("upload.message", "上传文件成功!");
} else
{
request.setAttribute("upload.message", "没有选择上传文件!");
}
}
}
}
catch (FileUploadException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
request.setAttribute("upload.message", "上传文件失败!");
}
request.getRequestDispatcher("/uploadResult.jsp").forward(request, response);

android端代码如下:

[java] view plainprint?
public class SocketHttpRequester {
/**
*多文件上传
* 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
* <FORM METHOD=POST ACTION="http://192.168.1.101:8083/upload/servlet/UploadServlet" enctype="multipart/form-data">
<INPUT TYPE="text" NAME="name">
<INPUT TYPE="text" NAME="id">
<input type="file" name="imagefile"/>
<input type="file" name="zip"/>
</FORM>
* @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.iteye.cn或http://192.168.1.101:8083这样的路径测试)
* @param params 请求参数 key为参数名,value为参数值
* @param file 上传文件
*/
public static boolean post(String path, Map<String, String> params, FormFile[] files) throws Exception{
final String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线
final String endline = "--" + BOUNDARY + "--\r\n";//数据结束标志

int fileDataLength = 0;
for(FormFile uploadFile : files){//得到文件类型数据的总长度
StringBuilder fileExplain = new StringBuilder();
fileExplain.append("--");
fileExplain.append(BOUNDARY);
fileExplain.append("\r\n");
fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
fileExplain.append("\r\n");
fileDataLength += fileExplain.length();
if(uploadFile.getInStream()!=null){
fileDataLength += uploadFile.getFile().length();
}else{
fileDataLength += uploadFile.getData().length;
}
}
StringBuilder textEntity = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {//构造文本类型参数的实体数据
textEntity.append("--");
textEntity.append(BOUNDARY);
textEntity.append("\r\n");
textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
textEntity.append(entry.getValue());
textEntity.append("\r\n");
}
//计算传输给服务器的实体数据总长度
int dataLength = textEntity.toString().getBytes().length + fileDataLength + endline.getBytes().length;

URL url = new URL(path);
int port = url.getPort()==-1 ? 80 : url.getPort();
Socket socket = new Socket(InetAddress.getByName(url.getHost()), port);
OutputStream outStream = socket.getOutputStream();
//下面完成HTTP请求头的发送
String requestmethod = "POST "+ url.getPath()+" HTTP/1.1\r\n";
outStream.write(requestmethod.getBytes());
String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
outStream.write(accept.getBytes());
String language = "Accept-Language: zh-CN\r\n";
outStream.write(language.getBytes());
String contenttype = "Content-Type: multipart/form-data; boundary="+ BOUNDARY+ "\r\n";
outStream.write(contenttype.getBytes());
String contentlength = "Content-Length: "+ dataLength + "\r\n";
outStream.write(contentlength.getBytes());
String alive = "Connection: Keep-Alive\r\n";
outStream.write(alive.getBytes());
String host = "Host: "+ url.getHost() +":"+ port +"\r\n";
outStream.write(host.getBytes());
//写完HTTP请求头后根据HTTP协议再写一个回车换行
outStream.write("\r\n".getBytes());
//把所有文本类型的实体数据发送出来
outStream.write(textEntity.toString().getBytes());
//把所有文件类型的实体数据发送出来
for(FormFile uploadFile : files){
StringBuilder fileEntity = new StringBuilder();
fileEntity.append("--");
fileEntity.append(BOUNDARY);
fileEntity.append("\r\n");
fileEntity.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
outStream.write(fileEntity.toString().getBytes());
if(uploadFile.getInStream()!=null){
byte[] buffer = new byte[1024];
int len = 0;
while((len = uploadFile.getInStream().read(buffer, 0, 1024))!=-1){
outStream.write(buffer, 0, len);
}
uploadFile.getInStream().close();
}else{
outStream.write(uploadFile.getData(), 0, uploadFile.getData().length);
}
outStream.write("\r\n".getBytes());
}
//下面发送数据结束标志,表示数据已经结束
outStream.write(endline.getBytes());

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(reader.readLine().indexOf("200")==-1){//读取web服务器返回的数据,判断请求码是否为200,如果不是200,代表请求失败
return false;
}
outStream.flush();
outStream.close();
reader.close();
socket.close();
return true;
}

/**
*单文件上传
* 提交数据到服务器
* @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.itcast.cn或http://192.168.1.10:8080这样的路径测试)
* @param params 请求参数 key为参数名,value为参数值
* @param file 上传文件
*/
public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception{
return post(path, params, new FormFile[]{file});
}
}

F. http中最常见的表单提交,采用的是什么格式呢

http普通表单提交就是最基本的url查询格式,也就是key=value格式,如果表单选择的post模式这段查询就是放在post体里面,否则get模式就会追加到url的后面。
比如,一个表单中有个文本框username,有个文本框password,那么输入数据提交后,实际提交的只是下面这样格式的字符串(多个字段用&连接):
username=aaaa&password=123456

G. android get和post的区别

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

H. 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访问,上传,用了三个方法 》

I. 表单向服务器发送http请求通常有哪两种办法

表单向服务器发送http请求通常有这Get和Post两种办法。将表单数据发送给服务器的常用方式有两种:Get和Post。浏览器发送给服务器的HTTP请求分为:请求头(header)和请求主体(body)两部分。其中,必须包含头部分,用于指定发送请求的方式、目的地以及其他关键信息;而主体是可选的。在头数据和主体数据之间用一个空白行来隔开。

Get和Post区别

GET和POST的主要区别是数据以何种方式发送到服务器。GET将表单域名和值作为键/值对追加到URL末尾。URL中。后面的数据是可见的。POST也会发送数据,同样通过一个关联数据发送,但是编码方式不同,另外URL中的数据对最终用户不可见。

J. 为什么form表单提交的数据 后台只接收到了一个

这里只介绍htt方面。网络请求方式可分为get请求,post两种请求方式,GET方式在进行数据请求时,会把数据附加到URL后面传递给服务器,比如常见的:http://XXX.XXX.XXX/XX.aspx?id=1,POST方式则是将请求的数据放到HTTP请求头中,作为请求头的一部分传入服务器。
所以,在进行HTTP编程前,首先要明确究竟使用的哪种方式进行数据请求的。

android中Http编程有两种:1、HttpURLConnection;2、HttpClient

首先介绍一下HttpURLConnection方式的get请求和post请求方法:

[java] view
plainprint?

private Map<String, String> paramsValue;

String urlPath=null;// 发送地http://192.168.100.91:8080/myweb/login?username=abc&password=123

public void initData(){urlPath="http://192.168.100.91:8080/myweb/login";

paramsValue=new HashMap<String, String>();

paramsValue.put("username", "111");

paramsValue.put("password", "222");

}

private Map<String, String> paramsValue;
String urlPath=null;

// 发送地http://192.168.100.91:8080/myweb/login?username=abc&password=123
public void initData(){

urlPath="http://192.168.100.91:8080/myweb/login";
paramsValue=new HashMap<String, String>();
paramsValue.put("username", "111");
paramsValue.put("password", "222");
}
get方式发起请求:

[java] view
plainprint?

private boolean sendGETRequest(String path, Map<String, String> params) throws Exception {

boolean success=false;// StringBuilder是用来组拼请求地址和参数

StringBuilder sb = new StringBuilder();

sb.append(path).append("?");

if (params != null && params.size() != 0) {

for (Map.Entry<String, String> entry : params.entrySet()) {

// 如果请求参数中有中文,需要进行URLEncoder编码 gbk/utf8

sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));

sb.append("&");

}

sb.deleteCharAt(sb.length() - 1);

}URL url = new URL(sb.toString());

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(20000);

conn.setRequestMethod("GET");
if (conn.getResponseCode() == 200) {

success= true;

}

if(conn!=null)

conn.disconnect();

return success;

}
private boolean sendGETRequest(String path, Map<String, String> params) throws Exception {
boolean success=false;

// StringBuilder是用来组拼请求地址和参数
StringBuilder sb = new StringBuilder();
sb.append(path).append("?");
if (params != null && params.size() != 0) {
for (Map.Entry<String, String> entry : params.entrySet()) {
// 如果请求参数中有中文,需要进行URLEncoder编码 gbk/utf8
sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1);
}

URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(20000);
conn.setRequestMethod("GET");

if (conn.getResponseCode() == 200) {
success= true;
}
if(conn!=null)
conn.disconnect();
return success;
}

阅读全文

与androidhttp表单提交数据相关的资料

热点内容
程序员东北大学 浏览:426
编译忽略空字符 浏览:117
多店铺阿里云服务器教程 浏览:378
单片机求初值 浏览:420
安卓机如何在电脑备份图片 浏览:925
ca证书加密机价格 浏览:798
天干地支年份算法 浏览:796
程序员打造的视频 浏览:7
java和php通信 浏览:680
为什么黑程序员 浏览:163
程序员男生 浏览:456
戴尔文件夹内文件怎么置顶 浏览:582
云服务器6m网速 浏览:722
vivo手机中国联通服务器地址 浏览:862
工程总控编译失败 浏览:707
燕赵红枫app如何下载 浏览:867
php查杀软件 浏览:878
教育管理学pdf 浏览:547
服务器均衡怎么使用 浏览:626
linux中jps 浏览:954