通过cookielib获取cookies

本文介绍了一种针对无验证码登录方式的自动化登录方法,通过使用Python的urllib2和cookielib模块,实现向目标网站发送POST请求进行批量账号登录,并保存登录后的Cookie信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适用于没有验证码登录,直接post参数登录的方式

# -*- coding: utf-8 -*-
import time
import random
import pickle
import cookielib
import os
import urllib2,urllib
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

class Login(object):
    def __init__(self,account,pwd):
        self.account=account
        self.pwd=pwd

    def login_post(self):
        file_name='../Cookies/{0}.txt'.format(self.account)
        with open(file_name,'w') as f:
            f.write('')
        cookie=cookielib.MozillaCookieJar(file_name)
        handler=urllib2.HTTPCookieProcessor(cookie)
        opener=urllib2.build_opener(handler)
        agent_list = [
            'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
            'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0'
        ]
        login_url="""http://www.fenjianli.com/login/login.htm"""
        headers={
                    'Host': 'www.fenjianli.com',
                    'User-Agent': random.choice(agent_list),
                    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
                    'Referer': 'http://www.fenjianli.com/login/home.htm',
                    'Connection': 'keep-alive'
            }

        post_data={
            'username':self.account,
            'password':self.pwd,
            'rememberMe':1
        }
        login_data=urllib.urlencode(post_data)
        req=urllib2.Request(url=login_url,headers=headers,data=login_data)
        opener.open(req)
        cookie.save(ignore_discard=True, ignore_expires=True)
        print "获取",self.account,"账户cookie成功..........................."

def start_login():
    with open('account.txt','r') as f:
        name_pwds=f.readlines()
    for _id,name_pwd in enumerate(name_pwds):
        print '='*30+str(_id+1)+'='*30
        name_pwd_list=name_pwd.replace('\n','').split(',')
        print "开始获取",name_pwd_list[0],"账户cookie..................."
        login=Login(name_pwd_list[0],name_pwd_list[1])
        login.login_post()
        print '=' * 70
        time.sleep(5)

from Utlis.utlis_01 import *

def login_remain(fork=True,base=10):
    fork_cnt=0
    while fork==True:
        fork_cnt+=1
        print '{0} fork times {1}...'.format(genCurDateTime(),fork_cnt)
        start_login()
        SleepProgram(base=base)

if __name__=='__main__':
    login_remain()

<think>好的,用户想知道如何在编程中获取HTTP Cookie。首先,我需要回顾一下HTTP Cookie的基本概念。Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,常用于会话管理、用户跟踪等。获取Cookie的步骤通常包括发送HTTP请求、接收响应并从中提取Cookie信息。 接下来,我需要根据不同的编程语言整理获取Cookie的方法。比如在Python中,可以使用requests库,处理响应对象的cookies属性。在Java中,可能需要从HttpURLConnection的响应头中提取Set-Cookie字段。对于C/C++,可能需要手动解析HTTP头中的Cookie值。Django框架虽然常用于处理Cookie,但用户的问题更偏向于获取而非设置,所以可能需要调整示例代码,展示如何从请求对象中读取Cookie。 还要注意用户提供的引用内容。引用[3]提到在Java后端需要手动从Set-Cookie头中提取Cookie,并保存到后续请求中。引用[4]涉及C++中处理Cookie的类实现,可能需要展示如何解析头信息。Python的示例可能更简单,适合初学者,而Java和C++的例子则需要更多细节。 用户可能的应用场景包括Web爬虫、API调用时需要维持会话,或者测试需要处理Cookie的Web应用。需要确保示例代码正确,并且涵盖主要步骤:发送请求、获取响应头、提取Cookie、存储和使用。此外,应提醒用户注意Cookie的安全性和隐私问题,比如敏感信息的处理。 最后,生成相关问题时要围绕Cookie获取、处理、存储以及安全性展开,帮助用户深入理解相关主题。需要检查每个代码示例是否符合语法规范,比如Python中使用requests.get().cookies,Java中使用getHeaderField("Set-Cookie"),C++中使用字符串操作解析。确保各部分解释清晰,步骤明确,用户能够逐步跟随操作。</think>### 如何获取HTTP Cookie的编程实现 在HTTP编程中,Cookie获取主要依赖于解析HTTP响应头中的`Set-Cookie`字段。以下是不同编程语言的具体实现方法: --- #### 1. Python实现 使用标准库`requests`发送请求后,可直接从响应对象获取Cookie: ```python import requests response = requests.get("https://example.com/login") # 获取所有Cookie(字典形式) cookies = response.cookies print("Cookies:", cookies.get_dict()) # 获取特定Cookie值 session_id = cookies.get("session_id") print("Session ID:", session_id) ``` 通过`response.cookies`可直接访问Cookie字典,支持按名称检索值[^1]。 --- #### 2. Java实现 在Java中需手动从响应头提取`Set-Cookie`字段: ```java import java.net.HttpURLConnection; import java.net.URL; public class CookieExample { public static void main(String[] args) throws Exception { URL url = new URL("https://example.com/login"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 获取Set-Cookie头 String setCookieHeader = conn.getHeaderField("Set-Cookie"); System.out.println("Set-Cookie Header: " + setCookieHeader); // 解析Cookie(示例格式:session_id=abc123; Path=/) String[] cookieParts = setCookieHeader.split(";")[0].split("="); String cookieName = cookieParts[0]; String cookieValue = cookieParts[1]; } } ``` 需注意多个Cookie可能通过逗号分隔,需进一步拆分处理[^3]。 --- #### 3. C++实现 通过手动解析HTTP响应头实现: ```cpp #include <iostream> #include <curl/curl.h> size_t WriteCallback(char* data, size_t size, size_t nmemb, std::string* buffer) { buffer->append(data, size * nmemb); return size * nmemb; } int main() { CURL* curl = curl_easy_init(); std::string response_header; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/login"); curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_HEADERDATA, &response_header); CURLcode res = curl_easy_perform(curl); if (res == CURLE_OK) { // 查找Set-Cookie字段 size_t pos = response_header.find("Set-Cookie: "); if (pos != std::string::npos) { std::string cookie_line = response_header.substr(pos + 12); size_t end = cookie_line.find("\r\n"); std::string cookie = cookie_line.substr(0, end); std::cout << "Cookie: " << cookie << std::endl; } } curl_easy_cleanup(curl); return 0; } ``` 使用libcurl库时,需通过回调函数捕获响应头并解析[^4]。 --- ### 关键注意事项 1. **多值Cookie处理**:某些响应可能包含多个`Set-Cookie`头,需循环遍历所有相关字段 2. **属性解析**:Cookie可能包含`Expires`、`Path`等属性,需根据需求选择是否存储 3. **安全存储**:敏感Cookie应加密存储,避免明文泄露 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值