我想使用python下载和解析网页,但要访问它我需要设置几个cookie.因此,我需要首先通过https登录网页.登录时刻涉及向/login.php发送两个POST参数(用户名,密码).在登录请求期间,我想从响应头中检索cookie并存储它们,以便我可以在请求中使用它们来下载网页/data.php.
我怎么能在python中做到这一点(最好是2.6)?如果可能的话我只想使用内置模块.
我之前使用过带有HttpWebRequest和HttpWebResponse会话的CookieContainer,但现在,我想将它与WebClient一起使用.据我所知,没有像HttpWebRequests(request.CookieContainer)那样的内置方法.如何从CookieContainer中的WebClient收集cookie?
public class CookieAwareWebClient : WebClient
{
private readonly CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.CookieContainer = m_container;
}
return request;
}
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
在我的应用程序中,我需要使用快速框架设置一个cookie.我尝试了以下代码,但它没有设置cookie.
任何人都可以帮我这样做吗?
var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
app.use(express.cookieParser());
app.use(express.static(__dirname + '/public'));
app.use(function (req, res) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })
console.log('cookie have created successfully');
});
});
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);
Run Code Online (Sandbox Code Playgroud) 如何删除名称中的特定cookie roundcube_sessauth?
不应该如下:
function del_cookie(name) {
document.cookie = 'roundcube_sessauth' +
'=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
}
Run Code Online (Sandbox Code Playgroud)
然后:
<a href="javascript:del_cookie(name);">KILL</a>
Run Code Online (Sandbox Code Playgroud)
杀掉roundcube_sessauth饼干?
如何删除Java servlet中的cookie?
我试过这个:http: //www.jguru.com/faq/view.jsp?EID = 42225
编辑:以下现在成功运作它似乎是以下的组合:
response.setContentType("text/html");
Run Code Online (Sandbox Code Playgroud)
和
cookie.setMaxAge(0);
Run Code Online (Sandbox Code Playgroud)
在我做之前:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)
根据文档关闭浏览器时,cookie会过期.
负值表示cookie不会持久存储,并在Web浏览器退出时被删除.零值会导致cookie被删除.
要使Cookie过期的完整工作代码段是:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud) 我想设置一个永不过期的cookie.这甚至可能吗?
document.cookie = "name=value; expires=date; path=path;domain=domain; secure";
Run Code Online (Sandbox Code Playgroud)
我不想让日期真的很大,我只是想知道cookie上的expires参数是否有值告诉它永远不会过期.
谢谢.
具体而言,这与使用客户端会话cookie来识别服务器上的会话有关.
对整个网站使用SSL/HTTPS加密是最好的答案,并且您可以最好地保证中间人攻击中没有人能够嗅探现有的客户端会话cookie吗?
也许第二最好对存储在会话cookie中的会话值本身使用某种加密?
如果恶意用户具有对计算机的物理访问权限,他们仍然可以查看文件系统以检索有效的会话cookie并使用它来劫持会话?
所以其他公司的一些人认为如果不是使用soap或xml-rpc或其他合理的通信协议而是将其所有响应作为cookie嵌入标题中,那将是非常棒的.
我需要将这些cookie拉出来,希望这个卷曲响应中有一个数组.如果我不得不浪费我的一生为此写一个解析器,我会非常不高兴.
有谁知道如何简单地完成这项工作,最好不要在文件中写任何东西?
如果有人能帮我解决这个问题,我将非常感激.
对于我的身份验证过程,我在用户登录时创建一个唯一令牌,并将其放入用于身份验证的cookie中.
所以我会从服务器发送这样的东西:
Set-Cookie: token=$2a$12$T94df7ArHkpkX7RGYndcq.fKU.oRlkVLOkCBNrMilaSWnTcWtCfJC; path=/;
Run Code Online (Sandbox Code Playgroud)
哪个适用于所有浏览器.然后删除一个cookie我发送一个类似的cookie,其expires字段设置为1970年1月1日
Set-Cookie: token=$2a$12$T94df7ArHkpkX7RGYndcq.fKU.oRlkVLOkCBNrMilaSWnTcWtCfJC; path=/; expires=Thu, Jan 01 1970 00:00:00 UTC;
Run Code Online (Sandbox Code Playgroud)
这在Firefox上工作正常,但不会删除IE或Safari上的cookie.
那么删除cookie的最佳方法是什么(最好不使用JavaScript)?过去设定的过期方法看起来很笨重.还有为什么这在FF中工作但在IE或Safari中不起作用?
如何在30分钟内过期Cookie?我正在使用jQuery cookie.我可以做这样的事情.
$.cookie("example", "foo", { expires: 1 });
Run Code Online (Sandbox Code Playgroud)
这是1天.但是我们如何将到期时间设置为30分钟.