我知道有成千上万的文章和问答,教我如何用Java发送HTTP请求。但是它们所有人都使用BufferedReader来读取服务器的响应。
我不想使用BufferedReader,因为在我的android项目上使用它时遇到了“ OutOfMemoryError”。我不知道为什么这会在其他人成功的同时发生,但是这肯定是经过长时间的调试后由BufferedReader引起的,我对此感到非常厌倦。除了创建新的BufferedReader对象之外,还有什么方法可以检索响应? 我只想发送最简单的get请求,并获取提供HTML内容的响应,而不考虑效率。
代码示例如下(这不是我的代码,只是为了便于讨论。如果您有更好的示例,将不胜感激:)]
public class HttpURLConnection_GET_Request_Example {
public static void main(String[] args) throws Exception {
String url = "http://www.google.com/search?q=techndeck";
URL urlObj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
System.out.println("Send 'HTTP GET' request to : " + url);
Integer responseCode = connection.getResponseCode();
System.out.println("Response Code : " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader inputReader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = inputReader.readLine()) != null) {
response.append(inputLine);
}
inputReader.close();
System.out.println(response.toString());
}
}
}
使用OkHttp进行有效的网络访问
什么是OkHTTP?OkHTTP是一个开放源码项目,旨在成为高效的HTTP客户端。
// avoid creating several instances, should be singleon
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://www.vogella.com/index.html")
.build();
您也可以添加参数
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.github.help").newBuilder();
urlBuilder.addQueryParameter("v", "1.0");
urlBuilder.addQueryParameter("user", "vogella");
String url = urlBuilder.build().toString();
Request request = new Request.Builder()
.url(url)
.build();
来源https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html