如何从网页上阅读内容

时间:2013-07-09 04:10:53

标签: c#

我想访问一个网页&将网页的内容存储到数据库中 这是我尝试阅读网页内容的代码

    public static WebClient wClient = new WebClient();
    public static TextWriter textWriter;
    public static String readFromLink()
    {
      string url = "http://www.ncedc.org/cgi-bin/catalog-search2.pl";
        HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
        webRequest.Method = "POST";
        System.Net.WebClient client = new System.Net.WebClient();
        byte[] data = client.DownloadData(url);
        string html = System.Text.Encoding.UTF8.GetString(data);
        return html;
    }
    public static bool WriteTextFile(String fileName, String t)
    {

        try
        {
            textWriter = new StreamWriter(fileName);
        }
        catch (Exception)
        {
            return false;
            Console.WriteLine("Data Save Unsuccessful: Could Not create File");
        }

        try
        {
            textWriter.WriteLine(t);
        }
        catch (Exception)
        {
            return false;
            Console.WriteLine("Data Save UnSuccessful: Could Not Save Data");
        }
        textWriter.Close();
        return true;
        Console.WriteLine("Data Save Successful");
    }
    static void Main(string[] args)
    {
        String saveFile = "E:/test.txt";
        String reSultString = readFromLink();
        WriteTextFile(saveFile, reSultString);
        Console.ReadKey();
    }

但是这段代码给了我一个o / p as- This script should be referenced with a METHOD of POST. REQUEST_METHOD=GET

请告诉我如何解决此问题

4 个答案:

答案 0 :(得分:3)

您正在将HttpWebRequest与System.Net.WebClient代码混合使用。他们是不同的。您可以使用WebClient.UploadValues通过WebClient发送POST。您还需要提供一些POST数据:

    System.Net.WebClient client = new System.Net.WebClient();
    NameValueCollection postData = new NameValueCollection();
    postData.Add("format","ncread");
    postData.Add("mintime","2002/01/01,00:00:00");
    postData.Add("minmag","3.0");
    postData.Add("etype","E");
    postData.Add("outputloc","web");
    postData.Add("searchlimit","100000");
    byte[] data = client.UploadValues(url, "POST", postData);
    string html = System.Text.Encoding.UTF8.GetString(data);

您可以通过检查Fiddler中的POST消息来找出要传递的参数。是的,正如@Chris Pitman评论的那样,使用File.WriteAllText(path, html);

答案 1 :(得分:0)

我不确定你是否有错,因为我只是打开页面就得到了同样的信息。页面源不包含任何HTML,因此我不认为你可以做webRequest.Method =" POST"。你有没有和网站管理员说过话?

答案 2 :(得分:0)

.NET框架提供了一组丰富的方法来访问存储在Web上的数据。首先,您必须包含正确的命名空间:

using System.Text; 
using System.Net;
using System.IO;

HttpWebRequest对象允许我们创建对URL的请求,而WebResponse允许我们读取对请求的响应。

我们将使用StreamReader对象将响应读入字符串变量。

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();

在此代码示例中,URL变量应包含您要获取的URL,结果变量将包含网页的内容。您可能还想为实际应用程序添加一些错误处理。

答案 3 :(得分:0)

据我所知,您要求的URL是perl脚本。我认为它要求POST获取搜索参数,从而提供搜索结果。