【发布时间】:2017-11-20 02:40:03
【问题描述】:
我正在尝试使用 HttpURLConnection 获取远程 url 内容,但我一直得到空结果。通过查看 charle 代理,我可以看到 get 请求已执行,但 android 无法保存响应!你们能告诉我有什么问题吗使用此代码?提前致谢。
public String sendGetRequest() {
try {
StrictMode.setThreadPolicy(new Builder().permitAll().build());
HttpURLConnection myURLConnection = (HttpURLConnection) new URL("http://www.bbc.com").openConnection();
myURLConnection.setReadTimeout(60000);
myURLConnection.setConnectTimeout(60000);
myURLConnection.setRequestMethod("GET");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
myURLConnection.setRequestProperty("Content-Type", "text/plain");
myURLConnection.setRequestProperty("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 6.0;)");
myURLConnection.setRequestProperty("Connection", "Keep-Alive");
myURLConnection.addRequestProperty("Content-length", "");
OutputStream os = myURLConnection.getOutputStream();
os.close();
myURLConnection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(myURLConnection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
return sb.toString();
} catch (Exception e) {
}
return null;
}
我通过单击按钮调用上述函数:
public Button but1;
//creating public method
public void init() {
but1 = (Button) findViewById(R.id.but1);
//wire our button
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String finalResult = sendGetRequest();
mWebView.loadUrl("javascript:displayIt(" + finalResult+ ")");
}
});
}
编辑(使用后台进程):
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (Exception e) {
e.printStackTrace();
return "Failed";
}
}
}
【问题讨论】:
-
setDoOutput 是用于 POST 请求的,而且您在打开连接之前也得到了它,也不知道预期的结果,为什么 URL 是 javascript?