登录到通过C#网站,导航到另一个网页,然后输出源$ C $ C作为一个字符串(Logging into a website via C#, navigating to another web page, and then output the source code as a string)

   IT问题网   2018-08-20 00:00:00

问 题

我是比较新的,在c#中的网页的工作。我所要做的就是登录到特定网站(<一href="https://www15.swalife.com/portalweb/portal/cwalogon.jsp">https://www15.swalife.com/portalweb/portal/cwalogon.jsp ),并允许在网页被重定向到默认页面,然后从那里导航到(https://www15.swalife.com/csswa/ea/plt/accesselitt.do)和下载源$ c $ c和输出它为一个字符串。

我已经找到了如何下载通过httpwebrequest和httpwebresponse源$ c $ c,但我对编码记录在功能上有问题。我想我会做一些与post?我已经看过<一href="http://www.dreamin$c$c.net/forums/topic/152297-c%23-log-in-to-website-programmatically/">http://www.dreamin$c$c.net/forums/topic/152297-c%23-log-in-to-website-programmatically/也。

在此先感谢!!

编辑:

由jimmyjambles提供的code完美的作品,但它并没有完全得到我我想要的页面的源代码code。在code暗示的登录过程中失败了,但我相信有调整,我可以得到它的工作一点点......也对大家有问题的:

servicepointmanager.servercertificatevalidationcallback =新remotecertificatevalidationcallback(acceptallcertifications);
 

试着改变你的"公共字符串"和"公布尔"功能,以"公共静态字符串"和"公共静态布尔"分别为:)

编辑2:

响应html:

 " doctype html public \!" -// w3c // dtd html 4.01过渡// en \" \ n'lt; html \ n'lt; head \ \\\\\\ meta http-当量= \"内容类型\"内容= \"text / html的;字符集= iso-8859-1 \" \ n'lt; meta name = \"发电机\"内容= \"ibm的websphere studio \" \ n'lt; title endsession.jsp / title \ n'lt; link rel = \"样式\的"href = \"eipportletstyles / swalife.css \"型= \"文/ css \" \\ t脚本类型= \"文/ javascript的\"语言= \"的javascript \" \\ t \台橡= \"eipcommonjavascript / eipgeneralfunctions.js \"/ / script \\ t \ t \脚本类型= \"文/ javascript的\" \\\ tfunction refreshparent()\\ t {\\ t如果(window.parent)\\ t {\\ t如果(window.parent.name =='appmainframe')\\ t window.parent.location = \"/ csswa / ea / plt / logout.do \"; \\ t //警报('您的会话已过期,请重新登录。'); \\ t} \\ t} \\ n'lt; / script \ n'lt; / head \ n'lt; body的onload = \"refreshparent(); \" \\\ t \ t div class = \"eiperrors \" \\ t \ t \ t div class = \"legendlabel \"消息 / div \\ t \ t \ t \\ t \ t \ t div class = \"errorsheader formtitle \"您已经退出缺货船员web访问 br \ t \ t \ t \\ t \ t \ t / div \\ t \ t \ t \\ t \ t \ t div类= \"errorsheader formtitle \"请关闭此窗口和&lt;字体大小= \"+ 1 \"注销swalife&lt的; / font要完成注销过程。  / div \\ t \ t div class = \"errorstext \" \\ t \ t&放大器;  \\ t \ t \ t \ t \\ t \ t / div \\ t \ t \\ t \ t \ t \\ t \ t \\ t \ t div class = \"errorsfooter \"您将需要重新继续之前登录&lt。 ; / div \ t \\ t \ t \\ t / div \\ / body \ n'lt; / html \ n"
 
解决方案

为了使用的httpwebrequest登录后才能访问一个辅助url,你需要记住几件事情。

首先作为casperah提到,你将需要检查的登录表单,并确定了"名"用于接收的登录数据控件的属性。

一旦你做到了这一点,你需要相应地格式化后的字符串,并将其提供给webrequest的。

最后考虑的是,一旦你登录后,你将需要存储和维护的,让你在登录服务器分配给您的饼干。

我已经从这个msdn文章一个webrequest的片段,并修改了它进行第二次登录后,页面请求。

 字符串loginurl ="http://www.gmail.com";
字符串secondurl ="http://mail.google.com/$p$pfs";

字符串的用户名="bob@gmail.com";
字符串密码="12345";
getsecondaryloginpage(loginurl,secondurl,用户名,密码);



公共字符串getsecondaryloginpage(字符串loginurl,串secondurl,用户名字符串,字符串密码,串cookiename = null)
{
//创建使用,它可以接收后的url的请求。
httpwebrequest的要求=(httpwebrequest的)webrequest.create(loginurl);
//请求post的方法属性设置。
request.method ="post";

的cookiecontainer集装箱=新的cookiecontainer();

如果(cookiename!= null)
container.add(新的cookie(cookiename,用户名,"/",新的uri(loginurl)。主持人));

request.cookiecontainer =容器;

//创建post数据并将其转换为一个字节数组。相应地修改这一行
字符串postdata =的string.format("用户名= {0}&放大器;密码= {1}",用户名,密码);

servicepointmanager.servercertificatevalidationcallback =新system.net.security.remotecertificatevalidationcallback(acceptallcertifications);

字节[]的字节数组= encoding.utf8.getbytes(postdata);
//了的webrequest的contenttype属性设置。
request.contenttype ="应用/的x www的形式urlen coded";
//设置的webrequest的contentlength财产。
request.contentlength = bytearray.length;
//获取请求流。
流式传输的数据流= request.getrequeststream();
//将数据写入请求流。
datastream.write(字节数组,0,bytearray.length);
//关闭stream对象。
datastream.close();
//得到响应。
webresponse的响应= request.getresponse();
//获取服务器返回的包含流内容。
数据流= response.getresponsestream();
//打开使用一个streamreader为方便流。
streamreader的读者=新的streamreader(数据流);
//读取内容。
字符串responsefromserver = reader.readtoend();

使用(streamwriter的outfile =
新的streamwriter("output.html"))
{
outfile.write(responsefromserver.tostring());
}

//清理流。
reader.close();
datastream.close();
response.close();

请求=(httpwebrequest的)webrequest.create(secondurl);
request.cookiecontainer =容器;

响应= request.getresponse();
//获取服务器返回的包含流内容。
数据流= response.getresponsestream();
//打开使用一个streamreader为方便流。
读者=新的streamreader(数据流);
//读取内容。
responsefromserver = reader.readtoend();

//清理流。
reader.close();
datastream.close();
response.close();

返回responsefromserver;
}


公共bool acceptallcertifications(对象发件人,system.security.cryptography.x509certificates.x509certificate认证,system.security.cryptography.x509certificates.x509chain链,system.net.security.sslpolicyerrors sslpolicyerrors)
{
返回true;
}
 

唯一添加的行是为postdata和饼干。

您将需要修改的行

 字符串postdata =的string.format("用户名= {0}&放大器;密码= {1}",用户名,密码);
 

根据表格上的控制,因为您发布的网站你想与我合作可以猜测,你可能找

 字符串postdata =的string.format("uid = {0}&放大器; portalbase = cwa和放大器;密码= {1}",用户名,密码);
 

标签:登录通过网站导航另一个网页然后输出作为字符串



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

任务完成后,C#不释放内存(C# not releasing memory after task complete)

problem the following code is a simplified ex ...

如何检测攻(触摸输入)在全球范围,而不是鼠标点击?(How to detect tapping (touch input) globally instead of mouse clicking)

problem i want to make an app that shows itse ...

使用MVVM在WPF绑定命令(Bind command in WPF using MVVM)

problem i am learning mvvm and wpf. i have a xaml file in ...

ASP.NET在.NET 4中引起IE11掷_doPostBack是不确定的JavaScript错误(ASP.NET on .NET 4 causing IE11 throw _doPostBack is undefined javascript error)

problem edit: the site is on windows server 2003, hence c ...

我如何找到当前函数的调用函数的对象实例的类型?(How do I find the type of the object instance of the caller of the current function)

problem currently i have the function createl ...

是否有一个.NET的IoC是prefers约定优于配置?(Is there a .NET IoC that prefers convention over configuration)

problem simply put, if you had to use a ioc/d ...

数据绑定在C#和.NET(Databinding in C# and .NET)

problem i am pretty new to c# and .net and i'm strugling ...

如何实现清单上渐进式搜索(How to implement incremental search on a list)

problem i want to implement incremental searc ...

可这code进行优化?(Can this code be optimised)

problem i have some image processing code tha ...

重构LINQ的IQueryable EX pression删除查询重复的部分(refactoring LINQ IQueryable expression to remove duplicated portions of queries)

problem i have some linq queries that have re ...

如何以编程做文件版本使用SVN和.NET?(How to programatically do file versioning with SVN and .NET)

problem we have a report generator. daily, it writes its ...

如何检测.NET(执行线程关联)跨线程访问?(How to detect cross thread access in .NET (enforce thread affinity))

problem i'm writing a special data structure that will be ...

如何获得未使用的内存从多个管理应用程序的大型对象堆LOH回来?(How to get unused memory back from the large object heap LOH from multiple managed apps)

problem while talking to a colleague about a particular g ...

.NET OCRing图像(.NET OCRing an Image)

problem i'm trying to use modi to ocr a window's program. ...

检测对象在C#中的摄像机图像(Detect an object in a camera image in C#)

problem i have an image, taken from a live we ...

高层多线程/并发抽象为.NET(High-level multithreading/concurrency abstractions for .NET)

problem i just wondered why, unlike scala, f# or haskell, ...

命令绑定分层的DataTemplate(Command Binding in hierarchical datatemplate)

problem i have menu in my app. i'm visualizing it using h ...

如何跟踪从.NET应用程序的变化,在许多SQL Server数据库?(How to track changes in many SQL Server databases from .NET application)

problem problem: there are a lot of differen ...

有没有新的“动态”变量类型在.NET 4.0中解决CLR的单/多方法分配问题?(Does new &#39;dynamic&#39; variable type in .NET 4.0 solve the single/multiple method dispatch issue in CLR)

problem the problem of single dispatch is mostly familiar ...

AppFabric的缓存 - 一个现有的连接被强行关闭远程主机(AppFabric Cache - An existing connection was forcibly closed by the remote host)

problem i'm trying to get appfabric cache up and running ...