博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原创)如何获取网页URL的source code (Android)
阅读量:4565 次
发布时间:2019-06-08

本文共 9363 字,大约阅读时间需要 31 分钟。

1.对于常规的网址如: http开头的:

 

 URL oracle = 
new URL( url);
           String test = oracle.toExternalForm();
           String test1 = oracle.toString();
           URI oracle1 = 
null;
           
try {
             oracle1 = oracle.toURI();
        } 
catch (URISyntaxException e) {
            
//
 TODO Auto-generated catch block
            e.printStackTrace();
        }
            BufferedReader in = 
new BufferedReader(
            
new InputStreamReader(oracle.openStream()));
            String inputLine;
            String inputLine2 = "";
            
while ((inputLine = in.readLine()) != 
null)
                inputLine2 +=inputLine;
            in.close(); 

 

 

2.对加密网址:如https: (特别是需要证书的)

solution:取消所有证书的检测 

package s.s.d;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpConnectionMetrics;
public 
class AndroidHttpConnection 
implements ChunkedHttpConnection {
    
    HttpURLConnection  _conn;
    Map<String, List<String>>  _headers;
    
    
private 
static HostnameVerifier _hostnameVerifier;
    
private 
static TrustManager[] _trustManagers;
    
static {
        trustAllHostnames();
        trustAllHttpsCertificates();
    }
    
    
public 
static 
class FakeHostnameVerifier 
implements HostnameVerifier {
        
public 
boolean verify(String hostname, javax.net.ssl.SSLSession session) {
            
return (
true);
        }
    }
    
private 
static 
void trustAllHostnames() {
        
if (_hostnameVerifier == 
null) {
            _hostnameVerifier = 
new FakeHostnameVerifier();
        }
        HttpsURLConnection.setDefaultHostnameVerifier(_hostnameVerifier);    
    }
    
public 
static 
class FakeX509TrustManager 
implements X509TrustManager {
        
private 
static 
final X509Certificate[] _AcceptedIssuers = 
new X509Certificate[] {};
        
public 
void checkClientTrusted(X509Certificate[] chain, String authType) {
        }
        
public 
void checkServerTrusted(X509Certificate[] chain, String authType) {
        }
        
public X509Certificate[] getAcceptedIssuers() {
            
return (_AcceptedIssuers);
        }          
    }
    
private 
static 
void trustAllHttpsCertificates() {
        SSLContext context;
        
//
 Create a trust manager that does not validate certificate chains
        
if (_trustManagers == 
null) {
            _trustManagers = 
new TrustManager[] { 
new FakeX509TrustManager() };
        }
        
try {
            context = SSLContext.getInstance("TLS");
            context.init(
null, _trustManagers, 
new SecureRandom());
        } 
catch (GeneralSecurityException gse) {
            
throw 
new IllegalStateException(gse.getMessage());
        }
        HttpsURLConnection.setDefaultSSLSocketFactory(context
                .getSocketFactory());
    }
    
    
    
public AndroidHttpConnection(URL url) 
throws IOException
    {
        
if (!"http".equalsIgnoreCase(url.getProtocol()) && !"https".equalsIgnoreCase(url.getProtocol()))
            
throw 
new ProtocolException("Protocol " + url.getProtocol() + " doesn't support output");    
        
        _conn = (HttpURLConnection)url.openConnection();
        _conn.setRequestMethod("GET");
        _conn.setRequestProperty("Accept", "application/xml");
        _conn.setRequestProperty("Accept-Language", "en-us,en;q=0.5");
            
//
c.setRequestProperty("Accept-Encoding", "gzip,deflate");
        _conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.5");
        _conn.setRequestProperty("Keep-Alive", "300");
        _conn.setRequestProperty("Connection", "keep-alive");
        
//
_conn.connect();
        
//
_conn.setAllowUserInteraction(false);
        _conn.setUseCaches(
true);
        _conn.setInstanceFollowRedirects(
false);
        _conn.setDoOutput(
true);
    }
    
    
public AndroidHttpConnection(String url) 
throws IOException
    {
        
this(
new URL(url));
    }
    
public 
long getDate() 
throws IOException {
        
        
return _conn.getDate();
        
    }
    
public 
long getExpiration() 
throws IOException {
        
return _conn.getExpiration();
    }
    
public String getFile() {
        
return _conn.getURL().getFile();
    }
    
public Map<String, List<String>> getHeaders()
    {
        
if (_headers == 
null)
            _headers = _conn.getHeaderFields();        
        
        
return _headers;
    }
    
public String getHeaderField(String name) 
throws IOException {
        getHeaders();
        List<String> result = (List<String>)_headers.get(name.toLowerCase());
        
if (result != 
null)
            
return result.get(result.size()-1);
        
return 
null;
    }
    
public String getHeaderField(
int n) 
throws IOException {
        
return _conn.getHeaderField(n);
    }
    
public 
long getHeaderFieldDate(String name, 
long def) 
throws IOException {
        
return _conn.getHeaderFieldDate(name, def);
    }
    
public 
int getHeaderFieldInt(String name, 
int def) 
throws IOException {
        
return _conn.getHeaderFieldInt(name, def);
    }
    
public String getHeaderFieldKey(
int n) 
throws IOException {
        
return _conn.getHeaderFieldKey(n);
    }
    
public String getHost() {
        
return _conn.getURL().getHost();
    }
    
public 
long getLastModified() 
throws IOException {
        
return _conn.getLastModified();
    }
    
public 
int getPort() {
        
return _conn.getURL().getPort();
    }
    
public String getProtocol() {
        
return _conn.getURL().getProtocol();
    }
    
public String getQuery() {
        
return _conn.getURL().getQuery();
    }
    
public String getRef() {
        
return _conn.getURL().getRef();
    }
    
public String getRequestMethod() {
        
return _conn.getRequestMethod();
    }
    
public String getRequestProperty(String key) {
        
return _conn.getRequestProperty(key);
    }
    
public 
int getResponseCode() 
throws IOException {
        
//
getHeaders();
        
return _conn.getResponseCode();
    }
    
public String getResponseMessage() 
throws IOException {
        
//
getHeaders();
        
return _conn.getResponseMessage();
    }
    
public String getURL() {
        
return _conn.getURL().toString();
    }
    
public 
void setRequestMethod(String method) 
throws IOException {
        _conn.setRequestMethod(method);
    }
    
public 
void setRequestProperty(String key, String value) 
throws IOException {
        
if (key.equalsIgnoreCase("Transfer-Encoding") && value.equalsIgnoreCase("chunked"))
            _conn.setChunkedStreamingMode(0);
        _conn.setRequestProperty(key, value);
    }
    
public String getEncoding() {
        
return _conn.getContentEncoding();
    }
    
public 
long getLength() {
        
return _conn.getContentLength();
    }
    
public String getType() {
        
return _conn.getContentType();
    }
    
protected InputStream      _is;
    
protected DataInputStream _dis;
    
public DataInputStream openDataInputStream() 
throws IOException {        
        
if (_dis == 
null)
            _dis = 
new DataInputStream(openInputStream());
        
return _dis;
    }
    
public InputStream openInputStream() 
throws IOException {
        
if (_is == 
null)
        {    
             
//
if (_conn.getResponseCode() >= HttpURLConnection.HTTP_BAD_REQUEST)
            
//
 {
            
//
    _is = _conn.getErrorStream();
             
//
}
            
//
else
            {
                _is = _conn.getInputStream();
            }
        }
        
return _is;
    }
    
public 
void close() 
throws IOException {
        _conn.disconnect();
    }
    
protected OutputStream     _os;
    
protected DataOutputStream _dos;
    
public DataOutputStream openDataOutputStream() 
throws IOException {
        
if (_dos == 
null)
            _dos = 
new DataOutputStream(openOutputStream());
        
return _dos;
    }
    
public OutputStream openOutputStream() 
throws IOException {
        
if (_os == 
null)
            _os = _conn.getOutputStream();
        
return _os;
    }
/*
    public void setAuthenticator(final Authenticator auth) {
        java.net.Authenticator.setDefault(new java.net.Authenticator(){
            java.net.PasswordAuthentication _pa = null;
            
            protected java.net.PasswordAuthentication getPasswordAuthentication()
            {
                if (_pa == null)
                {
                    char[] pass = null;
                    PasswordAuthentication pa = auth.onAuthenticationChallenge(this.getRequestingPrompt(), true, true);
                    if(pa.getPassword() != null)
                    {
                        pass = new char[pa.getPassword().length];
                        for(int i = 0; i < pass.length; i++)
                            pass[i] = (char)pa.getPassword()[i];
                    }
                    _pa = new java.net.PasswordAuthentication(new String(pa.getUserName()), pass);
                }
                return _pa;
            }
        });
        
    }
*/
    
public InputStream openChunkedInputStream() 
throws IOException {
        
return openInputStream();
    }
    
public OutputStream openChunkedOutputStream(
int cacheLength)
            
throws IOException {
        _conn.setChunkedStreamingMode(cacheLength);        
        
return openOutputStream();
    }
    
public HttpConnectionMetrics getMetrics() {
        
//
 TODO Auto-generated method stub
        
return 
null;
    }
    
public 
int getSocketTimeout() {
        
//
 TODO Auto-generated method stub
        
return 0;
    }
    
public 
boolean isOpen() {
        
//
 TODO Auto-generated method stub
        
return 
false;
    }
    
public 
boolean isStale() {
        
//
 TODO Auto-generated method stub
        
return 
false;
    }
    
public 
void setSocketTimeout(
int arg0) {
        
//
 TODO Auto-generated method stub
        
    }
    
public 
void shutdown() 
throws IOException {
        
//
 TODO Auto-generated method stub
        
    }
}

2).

 

package s.s.d;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.http.HttpConnection;
public 
interface ChunkedHttpConnection 
extends HttpConnection {
    
public InputStream openChunkedInputStream() 
throws IOException;
    
public OutputStream openChunkedOutputStream(
int cacheLength) 
throws IOException;
}

 

3).主题部分:

 

AndroidHttpConnection con = 
new AndroidHttpConnection(url);
         
//
con.setRequestMethod("GET");
         Map<String, List<String>> headers = con.getHeaders();
         
int count = headers.size();    
         
         String value = con.getResponseMessage();
         
         InputStream is = con.openInputStream();
        
//
 OutputStream os = con.openOutputStream();
         
        
//
 os.write(buffer, offset, count)
         
         
         BufferedReader in = 
new BufferedReader(
new InputStreamReader(is));          
         
         String inputLine; 
         String htmlCode = ""; 
         
         
try { 
            
while ((inputLine = in.readLine()) != 
null) { 
                htmlCode += inputLine; 
               
//
 Log.d(LOG_TAG, "html: " + inputLine); 
            } 
         
            in.close(); 
            } 
catch (Exception e) { 
                e.printStackTrace(); 
               
//
 Log.d(LOG_TAG, "Error: " + e.getMessage()); 
                
//
Log.d(LOG_TAG, "HTML CODE: " + htmlCode); 
            }  
        

 网上搜索了一下:

 

1).

 

2).

 

3).

 

转载于:https://www.cnblogs.com/Jessy/archive/2012/03/15/2397720.html

你可能感兴趣的文章
MongoDB divide 使用之mongotempalte divide
查看>>
SSH不允许进行DNS解析
查看>>
Git(介绍和安装)
查看>>
磁盘管理
查看>>
重写与重载
查看>>
Python 爬取qqmusic音乐url并批量下载
查看>>
Java代码获取spring 容器的bean几种方式
查看>>
2015年3月5日(元宵节)——substr()与substring()的区别
查看>>
mysql 导出查询结果到文件
查看>>
Js参数值中含有单引号或双引号解决办法
查看>>
python5
查看>>
js转换/Date(........)/
查看>>
mysql中limit用法
查看>>
C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
查看>>
c++ std::thread + lambda 实现计时器
查看>>
NSRunLoop个人理解
查看>>
BZOJ_1031_[JSOI2007]_字符串加密_(后缀数组)
查看>>
[osg]osg窗口显示和单屏幕显示
查看>>
前端技术在线文档地址链接
查看>>
077_打印各种时间格式
查看>>