我正在尝试通过一个身份验证请求来模仿我们习惯在为此行为设置IIS时看到的"基本身份验证请求".
URL为:https
://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC =22&SC=1&ST=2(警告:https!)
此服务器在UNIX和Java下作为应用程序服务器运行.
这是我用来连接到此服务器的代码:
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2");
request.Credentials = new NetworkCredential(xxx,xxx);
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
(我从本网站上的另一篇文章中复制了此内容).但我从服务器收到这个答案:
底层连接已关闭:发送时发生意外错误.
我想我尝试了所有可能的任务,我对C#的知识必须提供给我,但没有...
有没有办法用HttpWebRequest/HttpWebResponse对象自动处理.NET中的cookie?我最好只在.NET环境中寻找LWP :: UserAgent及其行为(perl)的等价物.
有什么建议或意见吗?
我正在尝试使用Rohit Agarwal的BrowserSession课程和HtmlAgilityPack登录并随后浏览Facebook.
我之前通过编写自己的HttpWebRequest来管理同样的事情.但是,它只适用于我从浏览器手动获取cookie并在每次进行新的"会话"时向请求中插入新的cookie字符串.现在我正在尝试使用BrowserSession来获得更智能的导航.
这是当前的代码:
BrowserSession b = new BrowserSession();
b.Get(@"http://www.facebook.com/login.php");
b.FormElements["email"] = "some@email.com";
b.FormElements["pass"] = "xxxxxxxx";
b.FormElements["lsd"] = "qDhIH";
b.FormElements["trynum"] = "1";
b.FormElements["persistent_inputcheckbox"] = "1";
var response = b.Post(@"https://login.facebook.com/login.php?login_attempt=1");
Run Code Online (Sandbox Code Playgroud)
以上工作正常.当我尝试再次使用此BrowserSession来获取另一个页面时出现问题.我这样做是因为BrowserSession保存了来自最后一个响应的cookie并将它们插入到下一个请求中,因此我不应该再手动从我的浏览器中取出的cookiedata.
但是,当我尝试做这样的事情时:
var profilePage = b.Get(@"https://m.facebook.com/profile.php?id=1111111111");
Run Code Online (Sandbox Code Playgroud)
我得到的文件是空的.我会很感激我对错误的看法.
在下面的代码中,我可以使用HTMLAgilitypack设置用户名和密码的值,但是我无法调用登录按钮的click事件(按钮的源代码中的id是"s1").
无论如何要做到这一点?我没有使用的原因WebBrowser是因为我需要HTMLAgilityPack从源代码中没有ID的页面检索数据.
var doc = new HtmlWeb().Load("http://MYURL.com");
doc.DocumentNode.SelectSingleNode("name").SetAttributeValue("value", "MyUsername");
doc.DocumentNode.SelectSingleNode("password").SetAttributeValue("value", "MyPassword");
Run Code Online (Sandbox Code Playgroud)