通过HttpURLConnection获取网页信息

*纯代码

public class MainActivity extends Activity {

    protected static final int REQUESTSUCESS = 0;
    protected static final int REQUESTFAIL = 1;
    protected static final int REQUESTEXCEPTION = 2;
    private TextView tv_content;
    private EditText et_path;

    //创建handler对象
    private Handler handler = new Handler(){
        //处理handler发的消息
        public void handleMessage(android.os.Message msg) {

            //更新ui的逻辑必须放到主线程  在这个方法里面更新ui就可以了 

            //[1]区分消息类型
            switch (msg.what) {
            case REQUESTSUCESS:

                //[2]先获取发送消息携带的数据
                String content =  (String) msg.obj;

                //[3]把数据展示到控件上
                tv_content.setText(content);

                break;

            case REQUESTFAIL:
                Toast.makeText(MainActivity.this, "服务器忙!!!请稍后", 1).show();
                //清空数据
                tv_content.setText("");
                break;

            case REQUESTEXCEPTION:
                Toast.makeText(MainActivity.this, "服务器忙!!!", 1).show();
                tv_content.setText("");
                break;
            default:
                break;
            }



        };
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局
        setContentView(R.layout.activity_main);

        //[1]找到我们关心的控件
        et_path = (EditText) findViewById(R.id.et_path);
        tv_content = (TextView) findViewById(R.id.tv_content);


        System.out.println("当前线程的名字:"+Thread.currentThread().getName());




    }


    //点击按钮 根据指定的url地址获取网页的数据
    public void click(View v) {

        //创建一个子线程
        //创建一个子线程
        new Thread() {
            public void run() {
                try {
                    //[2]获取网页路径 
                    String path = et_path.getText().toString().trim();
                    //[2.1]创建url 来指定你要访问的url地址 
                    URL url = new URL(path);
                    //[2.2]获取httpurlConnection对象实例  (用于接收或者发送数据)
                    HttpURLConnection conn =  (HttpURLConnection) url.openConnection();
                    //[2.3]设置get请求   默认就是Get
                    conn.setRequestMethod("GET");  //注意 get要大写 
                    //[2.4]设置连接网络的超时时间 
                    conn.setConnectTimeout(5000);
                    //[2.5]获取服务器返回的状态码  
                    int code = conn.getResponseCode();
                    //[2.6] 判断状态码  如果是200说明请求成功 
                    if (code == 200) {
                        //[2.7] 获取服务器返回的数据  服务器是以流的形式把数据返回
                        InputStream in = conn.getInputStream();  //in里面的数据就是你访问的url地址返回的数据

                        //[2.8]由于把in转换成字符串是一个非常常见的操作 所以我们最好把这个操作做成一个工具类
                        String content = StreamTools.readInputSream(in);

                        //[2.9]把数据展示到控件上tv_content  我想要更新ui 找handler
//                      tv_content.setText(content);

                        //[3.0]创建message对象 
                        Message msg = new Message();
                        msg.what = REQUESTSUCESS;
                        //[3.1]把消息也发送过去 
                        msg.obj = content;
                        //[3.2]发消息
                        handler.sendMessage(msg); //handleMessage方法立刻就会执行



                    }else {
                        //[3.3]请求失败  给用户友好提示 
                        Message msg = new Message();
                        msg.what = REQUESTFAIL;
                        handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    e.printStackTrace();

                    Message msg = new Message();
                    msg.what = REQUESTEXCEPTION;
                    handler.sendMessage(msg);
                }


            }
        }.start();      




    }
}
 下面是StreamTools工具类
public class StreamTools {

    //把in转换成string 工具类
    public static String readInputSream(InputStream in) throws IOException {

        //创建内存输出流
        ByteArrayOutputStream  baos = new ByteArrayOutputStream();  //关闭此流无效
        int len =0;
        byte[] buffer = new byte[1024]; //1024 1kb
        while((len=in.read(buffer))!=-1){
            baos.write(buffer, 0, len);
        }
        in.close();


        return baos.toString();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用HttpURLConnection获取网页内容的示例代码如下: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("http://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 使用HttpClient获取网页内容的示例代码如下: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; public class HttpClientExample { public static void main(String[] args) { try { HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet request = new HttpGet("http://www.example.com"); HttpResponse response = httpClient.execute(request); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = ""; StringBuffer responseContent = new StringBuffer(); while ((line = rd.readLine()) != null) { responseContent.append(line); } rd.close(); System.out.println(responseContent.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 这两种方式都可以获取网页的内容,只不过使用的类和方法略有不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值