- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好吧,我已经在这个独奏上绞尽脑汁太久了。即使在这个网站和许多其他网站上花费了数小时,我也无法破解它。
本质上,我正在尝试使用 WebRequest/Response 从登录页面后面的网页中剥离一些数据。 (我已经使用带有一些分层事件的 WebBrowser 控件来实现这个功能,这些事件可以导航到不同的网页,但是在尝试重构时它会导致一些问题 - 更不用说使用隐藏表单来完成工作了是“不好的做法”。)
这是我的:
string formParams = string.Format("j_username={0}&j_password={1}", userName, userPass);
string cookieHeader;
WebRequest request = WebRequest.Create(_signInPage);
request.ContentType = "text/plain";
request.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse response = request.GetResponse();
cookieHeader = response.Headers["Set-Cookie"];
WebRequest getRequest = WebRequest.Create(sessionHistoryPage);
getRequest.Method = "GET";
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
到目前为止,我能够从第一个链接转到正确的页面,但是当我转到第二个链接时,它会将我送回登录页面,就好像我没有登录一样。
问题可能在于 cookie 没有被正确捕获,但我是新手,所以也许我只是做错了。它捕获从 POST 发回的 cookie:JSESSIONID 和 S2V 然而,当我们使用 FireFox WebConsole 转到“GET”时,浏览器显示它发送了 JSESSIONID、S2V 和 SPRING_SECURITY_REMEMBER_ME_COOKIE,我believe 是当我点击登录表单上的“记住我”框时使用的 cookie。
我已经尝试了很多不同的方法来使用 SO 的资源来完成这项工作,但我还没有到达我需要的页面。所以,为了我剩下的头发,我决定在好的 ole SO 上寻求帮助。 (这是我不想放弃的事情之一 - 有时像那样固执)
如果有人想要我尝试登录的网站的实际地址,我非常乐意通过私信将其发送给几个人。
我必须反射(reflect) Wal 建议答案的代码:
var request = (HttpWebRequest)WebRequest.Create(sessionHistoryPage);
request.Credentials = new NetworkCredential(userName, userPass);
request.CookieContainer = new CookieContainer();
request.PreAuthenticate = true;
WebResponse getResponse = request.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
这个建议,至少我实现它的方式,没有奏效。
正如 Krizz 所建议的,我更改了代码以使用 CookieContainer 并将 cookie 从一个请求传输到另一个请求,但是,响应只是返回原始登录页面,就好像我没有登录一样。
是否有某些网站不允许此类行为?
最终解决方案
最终的解决方案是由 Adrian Iftode 提出的,他说我尝试登录的网站可能不允许在没有有效 session 的情况下进行身份验证,因此在这个过程让我得到了那个 cookie。
感谢大家的帮助!
最佳答案
我正在为一个用 PHP 编写的网站做某种 cookie 传输。很明显你传递的是 cookie,但在那种情况下可能是这样
var phpsessid = response.Headers["Set-Cookie"].Replace("; path=/", String.Empty);
Set-Cookie
header 包含有关 cookie 的其他相关信息以及其他 cookie 的可能其他说明。我有一个带有信息(路径)的 cookie,我需要将其发送回服务器的 session ID,以便服务器知道我是发出 GET 请求的同一客户端。
新请求必须包含这个 cookie
request.Headers["Cookie"] = phpsessid;
您已经这样做了,但请确保您收到的 cookie 已发送回服务器。
考虑到 session 和身份验证,有两种 cookie,一种用于 session ,一种用于身份验证,一些服务器/应用程序可能不允许在没有有效 session 的情况下进行身份验证。我想说的是,您可能还需要传递 session cookie。所以步骤是:
同时检查 this question ,它没有显示整个类,但想法是将 CookieContainer 保持在同一个类中,从 POST/GET 请求中添加新的 cookie,并将它们分配给每个新请求,就像@Krizz 回答的那样。
关于c# - 登录 session 未使用 WebRequest/Response 转移到新网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461960/
这个问题与窗口处理或多个浏览器窗口的杂耍无关,而是关于在同一窗口中浏览 Web 应用程序的网页。我遇到这样的情况 1.我导航为屏幕 A->屏幕 x->屏幕 Y->屏幕 B 2.我需要捕获首次登录时屏幕
我有这个要求: The system will record the length of time the user displayed each page. 虽然在富客户端应用程序中微不足道,但我不
我在调试 JavaScript 网页时遇到问题。我遇到困难的地方是我标记 (...) 的地方。我收到未定义的错误。我是否将函数 countDown(start, Increment) 中的参数(即 s
需要一些帮助。我刚开始学习 HTML,今天一直在研究如何制作菜单,但在这样做时遇到了问题。 我似乎不知道如何在屏幕上居中显示菜单。 这就是我目前所拥有的; Home
我想通过单击按钮将小程序的任何参数发送到浏览器。 (HTML)。我知道按钮对象有一些方法,但不知道使用哪个。我怎样才能做到这一点?ps .: 我使用的是 jnlp 协议(protocol)。 类似于:
我应该使用Wikipedia的文章链接数据转储从组织的网站中提取代表性术语。 为此,我已经- 抓取并下载了该组织的网页。 (〜110,000) 创建了Wikipedia ID和术语/标题的字典。 (约
我的网页中包含 javascript 函数... function callFromAndroid(varName) { alert("call from android activated by
我想创建一个 Java 应用程序,允许用户导入网页并能够在程序中对其进行编辑。 导入网页将对其进行渲染,并且页面的组件(图像、文本等)将是可编辑或可拖动的,从而允许用户重新布局组件。 例如,用户可以加
当我们按下按钮时,我向 JFrame 添加了一个网页(网页在同一框架中打开)。效果很好。但我想向其中添加一个scrollPane,但是当我添加 JScrollPane jsp = new JScrol
我在使用 particles.js 时无法将图像居中。图像居中,但略微偏离中心。为什么要这样做,我如何才能将它居中? html particles.js demo CSS
我正在尝试在加载页面时播放音频,它应该非常简单但我无法完成。 问题是它没有播放,我尝试检查自动播放的状态(真/假),它说它在页面加载时播放,尽管它没有播放,还尝试制作一个将改变自动播放的功能状态为
我正在尝试显示用户从列表中选择的图像,但我在屏幕上看不到任何内容。 .container { position: relative; } .ce
这听起来有点奇怪,但我需要一些帮助,网页必须有一行必须包含三个部分,第一部分必须有 1 列的偏移量,并且部分之间的空间必须是 10px到目前为止,使用 Bootstrap 一切顺利。 现在第二行将有
这个问题在这里已经有了答案: Web and physical units (2 个答案) Div width in cm (inch) (6 个答案) 关闭 9 年前。
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我想将我的 IPython 笔记本的宽度设置为 2500 像素,并且我希望它左对齐。我该怎么做? 我使用这段代码来应用我自己的 CSS: from IPython.core.display impor
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this q
我在 Word 中制作了一份文档,希望人们在其中添加自己的姓名以及他们的教学经验。我已将其保存为网页并发布到此处: http://epicforum.net/TS ...但操作部分实际上就是这样: h
这个问题在这里已经有了答案: Execute JS code after pressing the spacebar (5 个答案) 关闭 4 年前。
我正在开发一个只有两个页面的网站。 1.登录 2.首页 我正在使用 Angular 框架。 app.config(['$routeProvider', function ($routeProvider
我是一名优秀的程序员,十分优秀!