zoukankan      html  css  js  c++  java
  • python 处理cookie简单很多啊 httpclient版本是4.3.3

    模拟登录流程:

    1 请求host_url

    2 从host_url中解析出 隐藏表单 的值 添加到POST_DATA中

    3 添加账户,密码到POST_DATA中

    4 编码后,发送POST请求
        要点1:java下,HttpClient必须是单例模式
        要点2:post的url可能跟登录界面的url不同。post_url可以从host_url的返回结果中得到(具体情况自行分析)
        
    5 通过firefox,chrome等相关插件验证登录完成

    6 测试需要登录的采集任务


    #
    --*-- coding:utf-8 --*-- import re import cookielib import urllib2 import urllib username = 'your account' pwd = 'your pwd' hosturl = 'https://passport.csdn.net/account/login' posturl = 'https://passport.csdn.net/account/login' cj = cookielib.LWPCookieJar() cookie_support = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) host_page = urllib2.urlopen(hosturl) html = host_page.read() def getgroup_1(res, input): pat = re.compile(res) m = pat.search(input) if m: return m.group(1) else: return None res_lt = 'name="lt" value="(.*?)"' lt = getgroup_1(res_lt, html) res_exe = 'name="execution" value="(.*?)"' exe = getgroup_1(res_exe, html) print 'hidden post data', lt, exe headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0'} post_data = {'_eventId': 'submit', 'execution': exe, 'lt': lt, 'username': username, 'password': pwd} post_data = urllib.urlencode(post_data) request = urllib2.Request(posturl, post_data, headers) print request response = urllib2.urlopen(request) txt = response.read() print txt
    附带:java代码。。。。。。。。要点是httpclient必须是同一个实例
    public
    class LoginTest { private static String getGroup_1(String res, String input){ Pattern p = Pattern.compile(res); Matcher m = p.matcher(input); while(m.find()){ return m.group(1); } return null; } public static void main(String[] args) {//登录csdn String uri = "https://passport.csdn.net/account/login"; String html = HttpUtil.DownHtml(uri); // <input type="hidden" name="lt" value="LT-207426-moK0sGnfCa9aqijJKeLYhFDYiEe2id" /> // <input type="hidden" name="execution" value="e1s1" /> // <input type="hidden" name="_eventId" value="submit" /> String lt = getGroup_1("name="lt" value="(.*?)"", html); String execution = getGroup_1("name="execution" value="(.*?)"", html); System.out.println(lt + " " + execution); //构建cookie Map<String, String> params = new HashMap<String,String>(); params.put("_eventId", "submit"); params.put("execution", execution); params.put("lt", lt); params.put("password", "******"); params.put("username", "******"); HttpUtil.Post(uri, params); System.out.println(System.currentTimeMillis()); }


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import org.apache.http.Header;
    import org.apache.http.HeaderIterator;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.config.CookieSpecs;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    
    public class HttpUtil {
    
        private static CloseableHttpClient httpclient = null;
      //要点:单例模式
        static {
            if (httpclient == null) {
                httpclient = HttpClients.createDefault();
            }
        }
    
        public static void Post(String uri, Map<String, String> params) {
    
            HttpPost httpost = new HttpPost(uri);
            List<NameValuePair> post_data = new ArrayList<NameValuePair>();
    
            Set<String> keySet = params.keySet();
            for (String key : keySet) {
                post_data.add(new BasicNameValuePair(key, params.get(key)));
            }
    
            CloseableHttpResponse response = null;
    
            try {
                httpost.setHeader("User-Agent",
                        "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0");
    
                httpost.setEntity(new UrlEncodedFormEntity(post_data, "UTF-8"));
                response = httpclient.execute(httpost);
    
                HeaderIterator it = response.headerIterator();
                while (it.hasNext()) {
                    System.out.println(it.next());
                }
                System.out.println("---------------html---------------");

    HttpEntity entity = response.getEntity(); String body = EntityUtils.toString(entity); System.out.println(body); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static String DownHtml(String uri) { HttpGet httpget = new HttpGet(uri); CloseableHttpResponse response = null; System.out.println(httpget.getURI()); System.out.println("Executing request " + httpget.getRequestLine()); try { response = httpclient.execute(httpget); System.out.println(response.getStatusLine().toString()); System.out.println("------------------------------"); // 头信息 HeaderIterator it = response.headerIterator(); StringBuffer buff = new StringBuffer(); while (it.hasNext()) { buff.append(it.next()); // System.out.println(it.next()); } System.out.println("------------------------------"); // 判断访问的状态码 int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { System.err .println("Method failed: " + response.getStatusLine()); } HttpEntity entity = response.getEntity(); // String charset = EntityUtils.getContentCharSet(entity); StringBuilder pageBuffer = new StringBuilder(); if (entity != null) { InputStream in = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader( in, "UTF-8")); String line; while ((line = br.readLine()) != null) { pageBuffer.append(line); pageBuffer.append(" "); } in.close(); br.close(); } return pageBuffer.toString(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }
  • 相关阅读:
    ssh端口转发
    linux git命令安装
    linux git命令
    linux cpio命令
    linux 抓包工具
    js 深拷贝 ,浅拷贝
    vue $router 打开新窗口
    excel常用操作
    Kafka Topic的增删改查操作
    linux上删除文件名乱码的文件
  • 原文地址:https://www.cnblogs.com/i80386/p/3770930.html
Copyright © 2011-2022 走看看