获取网络源码

package com.itheima.viewpagesource;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import com.itheima.viewpagesource.utils.StreamTool;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    protected static final int SUCCESS = 0;
    protected static final int ERROR = 1;
    protected static final int NETWORK_ERROR = 2;

    private EditText ed_path;
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ed_path = (EditText) findViewById(R.id.ed_path);
        tv = (TextView) findViewById(R.id.tv);
    }

    //定义一个秘书
    Handler handler = new Handler(){

        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {
            case SUCCESS:

                String value = (String) msg.obj;
                tv.setText(value);
                break;
            case ERROR:
                System.out.println("ERROR ==============");
                Toast.makeText(MainActivity.this, "错误发生了  ..  ERROR", 0).show();

                break;
            case NETWORK_ERROR:
                System.out.println("NETWORK_ERROR  ==============");
                Toast.makeText(MainActivity.this, "错误发生了  ..  NETWORK_ERROR ", 0).show();

                break;

            default:
                break;
            }
        };
    };

    String path = null;
    public void viewPageSource(View v){

        path = ed_path.getText().toString().trim();

        if(TextUtils.isEmpty(path)){
            Toast.makeText(this, "路径有错误...", 0).show();
            return;
        }

        //连接网络  , 要启动一个新的线程去  干 耗时的事儿
        new Thread(){
            public void run() {

                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

                    //设置连接超时为 5 秒钟
                    conn.setConnectTimeout(5000);
                    conn.setRequestMethod("GET");

                    // User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
                    //通过 设置 user-agent http的请求头 , 来骗  网站, 返回  pc机上 使用 浏览器 返回 数据的一个 页面 源代码

                    conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");

                    String contentType = conn.getContentType();

                    int code = conn.getResponseCode();
                    if(code==200){

                        InputStream in = conn.getInputStream();

                        // BitFactory.decodeStream(in)
                        //如何一个将一个 流转换为 字符串 

                        //这里的data是从  服务器 返回的
                        String data = StreamTool.decodeStream(in);

                        // 展示的屏幕上
                        Message msg = Message.obtain();
                        msg.what =SUCCESS;
                        msg.obj = data;

                        handler.sendMessage(msg);
                    }else{

                        Message msg = Message.obtain();
                        msg.what =ERROR;

                        handler.sendMessage(msg);

                    }

                } catch (Exception e) {
                    e.printStackTrace();

                    Message msg = Message.obtain();
                    msg.what =NETWORK_ERROR;

                    handler.sendMessage(msg);
                }

            };
        }.start();

    }

}
StreamTool.decodeStream方法:
package com.itheima.viewpagesource.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class StreamTool {

    public static String decodeStream(InputStream in) throws IOException {

        // 底层流
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        int len =0;
        byte[] buf = new byte[1024];

        while((len=in.read(buf))>0){
            baos.write(buf, 0, len);
        }

        String data = baos.toString();

        return data;
    }

}
时间: 2024-10-19 21:34:29

获取网络源码的相关文章

Android之使用HttpURLConnection类查看网络图片以及网络源码

1.首先,来介绍一下HttpURLConnection类,HttpURLConnection类位于java.net包中,用于发送HTTP请求和获取HTTP响应.由于此类是抽象类,不能直接实例化对象,所以需要使用URL的openConnection()方法来获得. 例如,要创建一个http://www.baidu.com 网站对应的HttpURLConnection对象,可以使用下列代码: URL url=new URL("http://www.baidu.com"); HttpURLC

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块

android-基于Webservice实现天气信息获取及源码下载(三)

本项目说明如下: 1.分别使用三种方式获取服务信息.soap.http get.http post三种方式实现信息的获取. 2.基于android调用webservice服务详细步骤实现 博文链接上一篇地址: android-基于Webservice实现天气信息获取及源码下载(一) android-基于Webservice实现天气信息获取及源码下载(二) 接上一篇博文讲述,省份列表和城市列表都是用了Adapter类,其实比较简单,代码如下: public class ProviceOrCityA

POST教程笔记 - WinHttp获取网页源码

①.WinINet与WinHttp的异同点,为什么使用WinHttp讲解? 详情见:<WinINet与WinHttp总结>文档,已经打包给大家了. ②.WinHttp接口调用方式:微软官方地址:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspxWinHttp微软提供了两种调用方式:C++调用API的版本.COM组件的版本.这里面使用的是 C++ Interface 接口的组件的方式来给大家讲解. ③.WinHttp常用命令讲解:详情

IXMLHTTPRequest获取网页源码的心得

在万一老师的博客看到一种利用IXMLHTTPRequest来获取网页源码的方法,但有2个问题没解决,自己研究了下改进了方法. 1.如果网页进行301转跳将无法获取源码 2.如果网站是gb2312编码将获取的是乱码 /////以下方法使用的是Delphi xe2编写 uses MsXML,activex; function GETHTML (const URL : string):string; // XMLHTTP接口Var XMLHTTP:IServerXMLHTTPRequest; HTML

获取android源码时repo的错误

今天用repo获取android源码:../bin/repo init -u git://android.git.kernel.org/platform/manifest.git出现问题:问题一:Traceback (most recent call last):File "./repo", line 590, in <module>    main(sys.argv[1:])File "./repo", line 557, in main    _In

Delphi XE下获取网页源码记录

存放个自己写的获取网页源码,掌握了: 1.利用CreateOLEObject方式获取源码 2.自动判断网页格式编码 需要使用到的单元:Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils 需要创建结构体:TResultWebHtml (用于存放返回的源码和Cookies) Uses Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils; type TResultWebHtml = record

C++ 获取网页源码码的操作

#include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,"Wininet.lib")#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ vector<TCHAR> v; TCHAR szUrl[] = _T("http:/

vc++获取网页源码

使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序, 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #import "C:\\Windows\\System32\\winhttp.dll" void CHttpTestDlg::OnBnClickedButton1() { ::CoInitialize(NULL); // 初始化com组件 IWinHttpRequest *pHttpReq = NU