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

java---网络请求

2015-03-29 14:47 337 查看
1,使用URLDecoder和URLEncoder

URLDecoder类(编码):用于将把一些乱码的特殊的字符转化成普通的字符串。——方法:decoder(String s,String enc)静态方法

URLEncoder类(译码):用于把普通的字符串转化成特殊的字符。—-方法:encoder(String s,String enc)

String data = "";
if (params != null) {
for (Entry<String, String> i : params.entrySet()) {
try {
data += "&"
+ URLEncoder.encode(i.getKey(), "UTF-8")
+ "="
+ URLEncoder.encode(i.getValue(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}


2,使用URL和URLConnection

URL对象代表的是统一资源定位器,它是指向互联网“资源”的指针

URL类的一堆方法:

String getFile():获取该URL的资源名。

String getHost():获取该URL的主机名。

String getPaht():获取该URL的路径部分。

int getPort():获取端口号

URLConnection openConnection();返回一个URLConnection对象,它代表了与URL所引用的远程对象的链接。

InputStream getInputStream();打开与此URL的链接,返回一个URL资源的inputstream,通过该方法可以很方便的读取远程的资源—-甚至是实现多线程下载。

3,URLConnection:表示应用程序和URL之间的通信链接

HttpURLConnection:表示应用程序和URL之间的http链接

(1)通过URL的openConnection方法来创建URLConnection对象

(2)设置URLConnection的参数和普通请求属性

(3)如果只是发送get请求,则使用connect()方法建立和远程资源之间的实际链接即可;如果需要发送POST方式的请求,则需要获取URLConnection实例对应的输出流来发送请求参数。

get请求:

URL url=new URL(path);

URLConnection conn=url.openConnection();

conn.connect();

格式:将请求的参数放在URL字符串之后,以?隔开。程序直接调用URLConnection对象的connect()方法即可

如果是发送POST请求,则需要设置doIn和doOut两个请求头字段的值,在使用URLConnection对应的输出流设置请求参数

响应:get和post的响应方式都一样,获取URLConnection的输入流

(4),远程资源变为可用,程序访问远程资源的头字段或输入流读取远程资源。

URLConnection的一堆方法:

objec getContent();获取URLConnection的内容

Stirng getHeaerField(String name):获取指定响应头字段的值。

***getInputStream()返回URLConnection对应的输入流,用于获取URLConnection响应的内容

getOutputStream():返回URLConnection对应的输出流,用于向URLConnection发送请求参数。*

package hk.wangdao.main;

import java.io.ByteArrayOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Map.Entry;
import android.os.Handler;
import com.google.gson.JsonSyntaxException;

public class Internet {

// 主线程的handler
private Handler mHandler = new Handler();

public interface onCallback {
public void callback(String response);
}

public void connetion(final String urlStr,
final Map<String, String> params, final onCallback callback) {
new Thread() {
public void run() {

URL url = null;
try {
url = new URL(urlStr);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpURLConnection connetion = null;
String data = "";
if (params != null) {
for (Entry<String, String> i : params.entrySet()) {
try {
data += "&"
+ URLEncoder.encode(i.getKey(), "UTF-8")
+ "="
+ URLEncoder.encode(i.getValue(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}

try {
connetion = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connetion.setRequestMethod("POST");
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
connetion.setReadTimeout(5000);
connetion.setConnectTimeout(5000);
connetion.setDoInput(true);
connetion.setDoOutput(true);

OutputStream output;
try {
output = connetion.getOutputStream();
output.write(data.getBytes());
output.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
if (connetion.getResponseCode() == 200) {
InputStream in = connetion.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
byte[] buffer = new byte[1024];
//放到字节数组buffer中去
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.close();
final String result = new String(out.toByteArray());
// 这里把线程放到handler所在的线程中去
mHandler.post(new Runnable() {

@Override
public void run() {
callback.callback(result);
}
});
}
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();

}

}


Android端的网络请求:

这里主要用HttpUrlConnection这个类

网络的连接:

String spec=”xxx.xxx.xxx”;

URL url=new URL(spec);

打开连接;

HttpUrlConnection connection=(HttpUrlConnection)url.openConnection;

设置请求方式

connection.setRequestMethod(“POST”);

connection.setDoInputTime(5000);

connection.setDoOutputTime(5000);

数据的格式要求:

String data=”&name=”+URLEncoder.encode(name,”UTF-8”)+”&password=”+URLEncoder.encode(password,”UTF-8”);

获取输出流:

outputStream output=connetion.getOutputStream();

output.write(date.getBytes());

output.flush();

获取输入流:

InputStream input=connection.getInputStream();

WebView组件:一个浏览器的实现。

一些方法:void goBack();后退

void goForward();前进

void loadUrl(String url);加载指定URL对应的网页

boolean zoomIn()放大网页

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