`

j2me Http Get和Post请求总结

    博客分类:
  • j2me
阅读更多

一:比较Http get和post区别:

java解释,和j2me类似,详细出处参考:http://www.jb51.net/web/12714.html还有字符编码的应用,有时间要学学java web,对服务器请求数据有更深了解

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;比http://211.139.191.144:8008/taac/services/applyCopyrightDeclaration.action?username=ldh&password=zhm,Post是将表单中的数据放在form的数据体中按照变量和值相对应的方式,传递到action所指向URL。如:设置属性值

Enumeration perpertyKeys = requestProperty.keys();
while (perpertyKeys.hasMoreElements()) {
     String key = (String) perpertyKeys.nextElement();
     String value = (String) requestProperty.get(key);
     conn.setRequestProperty(key, value);

}
 3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制最多1024字节;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。默认是用ISO-8859-1编码
6、Get是Form的默认方法。

 

二:构建服务器,目的是搞个测试地址测试get,post请求

 1.下载APMServ5.2.6,phpcms_v9_beta_UTF8

 2.安装好APMServ5.2.6后,把phpcms_v9_beta_UTF8解压到APMServ5.2.6安装目录./www/htdocs/下,打开 APMServ5.2.6启动服务,运行http://127.0.0.1出现画面,提示你要安装phpcms程序点击“请点这里开始安装”,按提示一步一步往下操作,到填写数据库信息时,数据库服务器用默认的,数据库帐号:root,密码为空,数据库名称你自己取,数据库前缀用默认为可以了,你也可以修改为自己想要的,然后填写网站管理员用户名、密码和邮箱即可,其它的用默认即可,点击下一步; 安装进行中,请稍等,大约几十秒后,提示安装完成即可。

在开启APMServ下,http://localhost:80/或者http://127.0.0.1:80是服务器地址,现在可以在./www/htdocs/下放文件如1.txt,hai7.png,访问地址是http://localhost:80/1.txthttp://localhost:80/hai7.png,在网络中是什么地址,好像还好做一些配置,以后再研究

也可参考APMServ官网使用教程http://www.cnzz.cc/edu/Server/web/4190.html

三:get访问,post访问,cmwap设置见下面:

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.TextField;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
 * 测试get,post请求,需要开启自己设定的APMServ服务才能测试,
 * 在APMServ安装目录./www/htdocs/下放icon.png,hai7.wav,1.txt资源
 *
 * @author hsz
 */
public class TestGetPost extends MIDlet implements CommandListener {
 public HttpConnection conn;
 public MainThread mainThread;

 public TextField user;// 用户名
 public TextField pass;// 密码
 public Command c1;
 private Form f;

 private int http_type = TYPE_POST;
 public static final int TYPE_GET = 0;
 public static final int TYPE_POST = TYPE_GET + 1;
 public static final String URL = "http://localhost:80/";
 public static final int TYPE_IMG = 0;// 图片
 public static final int TYPE_AUDOI = 1;// 音乐
 public static final int TYPE_TXT = 2;// TXT

 public static final boolean ISUSE_CMWAP = false;
 public static final String CMWAP_IP = "http://10.0.0.172:80/";

 public TestGetPost() {
  f = new Form("测试get,post!");
  c1 = new Command("确定", Command.SCREEN, 1);
  f.addCommand(c1);
  f.setCommandListener(this);
  Display.getDisplay(this).setCurrent(f);
  mainThread = new MainThread();
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 }

 protected void pauseApp() {
 }

 protected void startApp() throws MIDletStateChangeException {
 }

 public void commandAction(Command c, Displayable dd) {
  new Thread(mainThread).start();
 }

 class MainThread implements Runnable {
  public void run() {
   System.out.println("start");
   switch (http_type) {
   case TYPE_GET:
    get(getUrl(TYPE_IMG), TYPE_IMG);
    break;
   case TYPE_POST:
    post(getUrl(TYPE_IMG), TYPE_IMG);
    break;
   default:
    break;
   }
  }
 }

 public String getUrl(int type) {
  String tem = null;
  if (type == TYPE_IMG) {
   tem = URL + "icon2.png";
  } else if (type == TYPE_AUDOI) {
   tem = URL + "hai7.wav";
  } else if (type == TYPE_TXT) {
   tem = URL + "1.txt";
  }
  return tem;
 }

 public void displayResult(InputStream is, int type) {
  try {
   switch (type) {
   case TYPE_IMG:// 从网络中获取图片并显示
    Image im = Image.createImage(is);// 该方法为MIDP 2.0方法
    f.append(im);
    System.out.println("获得图片");
    break;
   case TYPE_AUDOI:// 从网络中获取音乐并播放,播放有问题,没有去更正
    Player p;
    p = Manager.createPlayer(is, "audio/x-wav");
    p.start();
    System.out.println("开始播放音乐");
    break;
   case TYPE_TXT:// 从网络中获取文本并显示
    byte[] buffer = new byte[1024 * 4];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int i = 0;
    while ((i = is.read(buffer)) != -1) {
     baos.write(buffer, 0, i);
    }
    byte[] allData = baos.toByteArray();
    String str = new String(allData);
    System.out.println("get获取的数据:" + str);
    f.append(str);
    buffer = null;
    allData = null;
    baos.close();
    break;
   default:
    break;
   }
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MediaException e) {
   e.printStackTrace();
  }
 }

 /**
  * 进行cmwap设置,把host:port换成CMWAP_IP,并设置"X-Online-Host"为Host:Port
  *
  * @param url
  * @return HttpConnection 已经打开URL的连接
  */
 public HttpConnection openConnUrl(String url) {
  try {
   if (ISUSE_CMWAP) {// 进行cmwap设置,把host:port换成CMWAP_IP,并设置"X-Online-Host"为Host:Port
    HttpURLParam urlparam = new HttpURLParam(url);
    String CMWAPurl = CMWAP_IP + urlparam.getPath();
    conn = (HttpConnection) Connector.open(CMWAPurl);
    conn.setRequestProperty("X-Online-Host", urlparam.getHost()
      + ":" + urlparam.getPort());
    urlparam = null;
   } else {
    conn = (HttpConnection) Connector.open(url);
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return conn;
 }

 /**
  * http get请求
  *
  * @param url
  *            在基本地址http://127.0.0.1:80/+....组成
  * @param type
  *            固定测试地址分图片,音乐,TXT
  */
 public void get(String url, int type) {
  try {
   conn = openConnUrl(url);

   conn.setRequestMethod(HttpConnection.GET);
   // 中间可能有很多属性设置

   // 获得响应状态
   int responseCode = conn.getResponseCode();
   if (HttpConnection.HTTP_OK == responseCode) {
    System.out.println("联网成功!");
    InputStream is = conn.openInputStream();
    displayResult(is, type);
    is.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    if (conn != null) {
     conn.close();
     conn = null;
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 /**
  * http post请求
  *
  * @param url
  *            在基本地址http://127.0.0.1:80/+....组成
  * @param type
  *            固定测试地址分图片,音乐,TXT
  */
 public void post(String url, int type) {
  try {
   conn = openConnUrl(url);

   conn.setRequestMethod(HttpConnection.POST);
   conn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");

   // 设置其它属性,如果没有其他属性requestProperty置为空
   Hashtable requestProperty = new Hashtable();
   if (requestProperty != null) {
    Enumeration perpertyKeys = requestProperty.keys();
    while (perpertyKeys.hasMoreElements()) {
     String key = (String) perpertyKeys.nextElement();
     String value = (String) requestProperty.get(key);
     conn.setRequestProperty(key, value);
    }
   }

   /**
    * post正文,写一个函数组织下面请求文件,再转成byte[]; 发送post正文请求 <?xml version="1.0"
    * encoding="UTF-8"?> <applyCopyrightDeclaration>
    * <version></version> <appuid></appuid>
    * </applyCopyrightDeclaration>
    */
   Hashtable params = new Hashtable();
   params.put("version", "1");
   params.put("appuid", "111");
   byte[] content = createCDXMLPack(true, params);
   if (content != null) {
    DataOutputStream dos = conn.openDataOutputStream();
    dos.write(content);
    dos.close();
   }

   // 获得响应状态
   int responseCode = conn.getResponseCode();
   if (HttpConnection.HTTP_OK == responseCode) {
    System.out.println("联网成功!");
    InputStream is = conn.openInputStream();
    displayResult(is, type);
    is.close();
    // 成功获取数据会送到解析层
    // netConnectionEvent.connSuccess(allData);
   }
  } catch (Exception e) {
   // netConnectionEvent.connFail(e.toString());
  } finally {
   try {
    if (conn != null) {
     conn.close();
     conn = null;
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 /**
  * 生成请求版权声明文件所需要的post pack
  *
  * @param haveXMLHead
  *            是否需要xml声明文件头
  * @param params
  *            键值对参数
  * @return byte[] pack
  */
 public static byte[] createCDXMLPack(boolean haveXMLHead, Hashtable params) {
  if (params == null || params.isEmpty())
   return null;
  StringBuffer packBuffer = new StringBuffer();
  if (haveXMLHead)
   packBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
  packBuffer.append("<applyCopyrightDeclaration>");
  Enumeration perpertyKeys = params.keys();
  while (perpertyKeys.hasMoreElements()) {
   String key = (String) perpertyKeys.nextElement();
   String value = (String) params.get(key);
   packBuffer.append("<" + key + ">");
   packBuffer.append(value);
   packBuffer.append("</" + key + ">");
  }
  packBuffer.append("</applyCopyrightDeclaration>");
  byte[] pack = null;
  ;
  try {
   pack = packBuffer.toString().getBytes("utf-8");
  } catch (UnsupportedEncodingException e) {
  }
  return pack;
 }

 /**
  * 获得host,port,path便于cmwap设置
  */
 class HttpURLParam {
  private String _host;
  private String _port;
  private String _path;

  public HttpURLParam(String aurl) {
   int idx = aurl.indexOf("://");
   if (idx == -1) {
    idx = 0;
   } else {
    idx += 3;
   }
   int idx2 = aurl.indexOf('/', idx);
   _host = aurl.substring(idx, idx2);
   int idx3 = _host.indexOf(':');
   if (idx3 == -1) {
    _port = "80";
   } else {
    _port = _host.substring(idx3 + 1);
    _host = _host.substring(0, idx3);
   }
   _path = aurl.substring(idx2);
  }

  public String getHost() {
   return _host;
  }

  public String getPort() {
   return _port;
  }

  public String getPath() {
   return _path;
  }
 }
}
工程见附件:

分享到:
评论

相关推荐

    j2me http通信demo

    `HttpConnection`提供了对HTTP协议的支持,可以用于发起HTTP GET和POST请求。以下是一个简单的GET请求示例: ```java String url = "http://example.com/api/data"; ConnectionFactory factory = new ...

    J2ME HTTPJ2ME HTTPJ2ME HTTP

    // 如果是POST请求,这里写入请求体 os.write(requestBody.getBytes()); os.close(); ``` 读取响应则通过`InputStream`进行: ```java InputStream is = conn.openInputStream(); byte[] buffer = new byte[4096];...

    Http.rar_C http_http请求_j2me socket cmnet_s40 cmnet socket_visual

    本文将深入探讨标题和描述中涉及的知识点,包括HTTP请求、J2ME中的Socket编程、CMNET网络环境以及在S40设备上的应用。 首先,我们来看看HTTP请求。HTTP请求是由客户端发起的,用于向服务器获取或提交信息的一系列...

    Http-Connect.rar_HTTPConne_connect_j2me http_j2me login

    标题“Http-Connect.rar_HTTPConne_connect_j2me http_j2me login”提及的项目就是一个典型的例子,它利用HTTP协议在MIDlet(J2ME的移动应用)中建立连接,向HTTP服务器发送请求并获取服务器上的数据。描述中提到,...

    J2ME里面的线程和网络

    5. **HTTP连接管理**:J2ME中的HttpConnection类支持基本的HTTP请求,如GET和POST,可用于发送和接收Web服务请求。 6. **流处理**:在读写网络数据时,通常会用到InputStream和OutputStream,它们提供了读取和写入...

    探索J2ME:用GCF通信

    2. POST请求允许通过单独的数据流发送大量数据到服务器,如提交Web表单。虽然数据不是直接在URL中显示,但仍然可能不安全。 3. HEAD请求仅用于获取服务器关于请求的元数据,不返回请求的数据本身,通常用于检查资源...

    用J2ME与ASP建立数据库连接.rar_http in j2me_j2me_j2me 3d_j2me asp

    2. **设置请求方法**:根据需求,可能是GET或POST请求。GET用于简单地获取数据,POST则可以携带额外的数据,如查询参数。通过`conn.setRequestMethod(HttpConnection.GET)`或`conn.setRequestMethod(HttpConnection....

    j2me基础知识之HTTP协议

    POST请求用于向服务器发送数据。J2ME中,需要先设置请求方法为POST,然后通过`setOutputStream()`获取输出流,写入要发送的数据。最后,同样通过`openInputStream()`获取服务器的响应。 **5. 请求头设置** J2ME允许...

    http j2me 图片上传

    综上所述,实现J2ME中的图片上传涉及了HTTP通信、图片数据处理、POST请求构造等多个环节,需要结合客户端和服务器端的代码协同工作。理解这些知识点对于开发J2ME应用尤其是涉及到网络交互的场景至关重要。

    J2ME网络编程以及网络游戏的实现

    在J2ME中,开发者可以使用`HttpConnection`对象建立到Web服务器的连接,发送GET或POST请求,获取响应数据。 **三、网络游戏的实现** 1. **通信协议**:网络游戏通常采用TCP或UDP协议进行通信,TCP提供可靠的连接,...

    j2me框架_用J2ME的通用联网框架开发联网.pdf

    例如,以下代码展示了如何使用`HttpConnection`来发送POST请求: ```java void postViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; OutputStream os = ...

    j2me网络编程大全

    本文将详细介绍J2ME中的网络通信技术,特别是HTTP和Socket两种常用方法,并通过具体的示例代码帮助读者更好地理解和应用这些技术。 #### 二、HTTPConnection详解 HTTP (Hypertext Transfer Protocol) 是一种用于从...

    J2ME中多个文件上传

    上传文件通常有两种方式:GET和POST。GET方式适用于数据量较小的情况,而POST方式更适合上传大文件或多个文件,因为它可以在请求体中携带大量数据。在J2ME中,对于POST上传,我们首先要设置HttpConnection的Content-...

    J2ME面试题J2ME面试题

    MIDP提供HttpConnection和StreamConnection接口来实现网络通信,面试可能会测试你如何发送GET/POST请求,处理数据流,或者实现WebSocket等。 6. **文件系统访问**: J2ME提供了RecordStore API来存储小量结构化...

    J2me访问c# Web Services

    - Web服务兼容性:默认情况下,.NET 1.1的Web服务不支持HTTP GET和POST请求,需要手动开启。 2. **解决方案**: - **服务器端**: - 修改`web.config`文件,设置HTTP编码为GB2312,确保与J2ME客户端一致: ```...

    在无线J2ME设备上实现超文本传输协议

    POST请求常用于提交表单数据或上传文件,数据包含在请求体中,而不是像GET请求那样包含在URL中。 在实际的无线网络编程中,J2ME的网络功能虽然简化了,但仍然需要处理网络连接的异步性、错误处理、数据编码解码等...

    j2me实现手机QQ源代码

    开发者通常会创建HTTP连接,发送POST或GET请求到服务器,并处理返回的数据。这些数据可能包括JSON、XML或者自定义格式,都需要进行解析和解码。 2. **数据加密**:为了保护用户的隐私和信息安全,手机QQ的通信数据...

    j2me相关知识04

    通过HttpConnection类,可以发送GET和POST请求,获取网页数据或发送表单数据。 8. **设备适配** 由于J2ME需要在不同硬件和操作系统上运行,开发者必须考虑设备适配问题。 Jad和Jar文件的使用,以及屏幕尺寸、输入...

Global site tag (gtag.js) - Google Analytics