C#通过身份验证连接到网页

时间:2011-08-04 12:04:49

标签: c# webclient

所以我一直在尝试获取一个对字符串使用身份验证并将其保存到文件的网页。它应该是非常基本的,所以我希望有人能看到我的错误。我对C#很陌生,所以请对我说:)

此代码在某种程度上起作用,但我得到的文件是登录屏幕的html,而不是为登录用户显示的页面。这是什么我做错了?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace fetchingweb
{
    class WebAutheticator
    {
        static void Main(string[] args)
        {
            string htmlHer = GetWeb();
            StreamWriter file = new
                StreamWriter("C:\\Users\\user\\Documents\\atextfile.txt");
            file.Write(htmlHer);
            file.Close();
        } //main end

        private static string GetWeb()
        {
            WebClient wc = new WebClient();
            wc.Credentials = new NetworkCredential("user", "pass");
            string url = "http://someurl.com/index.php";
            try
            {
                using (Stream stream = wc.OpenRead(new Uri(url)))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
            catch (WebException e)
            {
                return "failure!";
            }
        } //getweb end
    } //class end
} //namespace end

2 个答案:

答案 0 :(得分:2)

您正在使用NetworkCredential登录webapp,但是webapp正在使用某种形式的身份验证。 只要webapp未配置为使用网络凭据,这将无效。

由于这是一个php应用程序,我猜它使用普通表单auth,你需要在继续之前将用户名/密码发布到登录页面。

答案 1 :(得分:0)

查看您尝试登录和下载的网站登录页面上的代码。 会有一个<FORM..>部分,如果你需要发布它的帖子,如果它让你使用get。它将发布到新页面,并可能使用重定向,或者甚至引用自身。有可能会使用某种形式的会话ID或cookie来证明您已登录。

理解这一点的最好方法是编写一个代理,它接收你的请求,并显示你发送的内容和你得到的内容..因为这是理解当你使用东西时会发生什么以及你的程序将会发生什么的最佳方式需要做的就是模仿它