HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//3.与互联网(服务器)之间的连接搭好后,进行连接设置
//3.1 设置请求方式,这里我们设置成get
connection.setRequestMethod("GET");
//3.2设置请求服务器超时的时间,单位是毫秒
connection.setConnectTimeout(5000);
//下面的设置注掉是因为这些不是必需设置的。
//3.3设置读取的超时时间,单位是毫秒
//connection.setReadTimeout(60000);
//3.4设置其他请求参数
//connection.setRequestProperty();
//3.5 接收服务器返回的结果码
int code = connection.getResponseCode();
if (code == 200){
try {
InputStream in = connection.getInputStream();
Scanner scanner = new Scanner(in);
scanner.useDelimiter("\\A");
boolean hasInput = scanner.hasNext();
if (hasInput) {
return scanner.next();
} else {
return null;
}
} finally {
connection.disconnect();
}
}
我们可以这里设置请求方法或者添加头字段,更改连接的属性。然后从openConnection 获得一个输入流,接下来我们需读取这个输入流的内容,在java中有很多进行读取的方法,但是我们选择使用扫描器,用它来令牌化流,因为这样更简单快速。
通过将分隔符设置为\A,即从流起点开始,我们强制扫描器将流的整个内容读入,下一个令牌流,这并不光明正大,但是它可自动为我们做一些事情。
它可以缓冲数据,这意味着它不仅以小块从网络中提取数据,而且由于http不需要向我们提供内容大小,我们的代码要准备好处理不同大小的缓冲区,而此代码能够根据需要自动分配和释放缓冲区,它还能帮我们处理字符编程,特别是它能将UTF-8(json和JavaScript的默认编程)转换成UTF-16(Android使用的格式)。
还有很多其他方式可以做到这一点,我们添加了一个栈溢出链接,你可以阅读了解它们,。
http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string
我们把它附在下面:
public String convertStreamToString(InputStream is) {
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();
//或者
//String theString = IOUtils.toString(inputStream, encoding);
}