您的位置:首页 > 理论基础 > 计算机网络

(HttpURLConnection)强制转化

2016-07-15 11:31 489 查看

HTTP的请求详解在我的博客中已经讲解过:

http://blog.csdn.net/xiazdong/article/details/7215296

我在http://blog.csdn.net/xiazdong/article/details/7725867 中已经封装了一个HTTP请求的辅助类,因此可以很简单的发送GET、POST请求;

如HttpRequestUtil.sendGetRequest();是发送GET请求;

一、核心代码

HTTP GET 核心代码:

(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)String path = "http://../path?key="+value;

(3)URL url = new URL(path);//此处的URL需要进行URL编码;

(4)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(5)con.setRequestMethod("GET");

(6)con.setDoOutput(true);

(7)OutputStream out = con.getOutputStream();

(8)out.write(byte[]buf);

(9)int code = con.getResponseCode();

HTTP POST 核心代码:

(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)byte[]buf = ("key="+value).getBytes("UTF-8");

(3)String path = "http://../path";

(4)URL url = new URL(path);//此处的URL需要进行URL编码;

(5)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(6)con.setRequestMethod("POST");

(7)con.setDoOutput(true);

(8)OutputStream out = con.getOutputStream();

(9)out.write(byte[]buf);

(10)int code = con.getResponseCode();

二、GET和POST乱码解决方式

GET:

在doGet中加入:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

POST:

在doPost中加入:

request.setCharacterEncoding("UTF-8");

详情请看我的博文:

http://blog.csdn.net/xiazdong/article/details/7217022

三、服务器端代码

[java] view plain copy

package org.xiazdong.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/PrintServlet")

public class PrintServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

String age = new String(request.getParameter("age").getBytes("ISO-8859-1"),"UTF-8");

System.out.println("姓名:"+name+"\n年龄:"+age);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

System.out.println("姓名:"+request.getParameter("name")+"\n年龄:"+request.getParameter("age"));

}

}





四、Android端代码

在AndroidManifest.xml加入:

[html] view plain copy

<uses-permission android:name="android.permission.INTERNET"/>

MainActivity.java

[java] view plain copy

package org.xiazdong.network.submit;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

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.Toast;

public class MainActivity extends Activity {

private EditText name, age;

private Button getbutton, postbutton;

private OnClickListener listener = new OnClickListener() {

@Override

public void onClick(View v) {

try{

if (getbutton == v) {

/*

* 因为是GET请求,所以需要将请求参数添加到URL后,并且还需要进行URL编码

* URL = http://192.168.0.103:8080/Server/PrintServlet?name=%E6%88%91&age=20
* 此处需要进行URL编码因为浏览器提交时自动进行URL编码

* */

StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/PrintServlet");

buf.append("?");

buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");

buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));

URL url = new URL(buf.toString());

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

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200){

Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();

}

else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();

}

if (postbutton == v) {

/*

* 如果是POST请求,则请求参数放在请求体中,

* name=%E6%88%91&age=12

*

* */

StringBuilder buf = new StringBuilder();

buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");

buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));

byte[]data = buf.toString().getBytes("UTF-8");

URL url = new URL("http://192.168.0.103:8080/Server/PrintServlet");

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

conn.setRequestMethod("POST");

conn.setDoOutput(true); //如果要输出,则必须加上此句

OutputStream out = conn.getOutputStream();

out.write(data);

if(conn.getResponseCode()==200){

Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();

}

else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();

}

}

catch(Exception e){

}

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

name = (EditText) this.findViewById(R.id.name);

age = (EditText) this.findViewById(R.id.age);

getbutton = (Button) this.findViewById(R.id.getbutton);

postbutton = (Button) this.findViewById(R.id.postbutton);

getbutton.setOnClickListener(listener);

postbutton.setOnClickListener(listener);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: