代码之家  ›  专栏  ›  技术社区  ›  Dr 12

使用代理删除网页数据

  •  1
  • Dr 12  · 技术社区  · 10 年前

    下面的代码将抓取输入站点的源代码,我想做同样的事情,但要使用用户输入的代理。

    Console.WriteLine("Enter path");
    string fileName = Console.ReadLine();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    if (response.StatusCode == HttpStatusCode.OK)
    {
        Console.WriteLine("Page OK");
        Stream receiveStream = response.GetResponseStream();
        StreamReader readStream = null;
    
        if (response.CharacterSet == null)
        {
            readStream = new StreamReader(receiveStream);
        }
        else
        {
            readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
        }
    
        string data = readStream.ReadToEnd();
    
    
        response.Close();
        readStream.Close();
        Console.WriteLine(data);
    
        System.IO.File.WriteAllText(@fileName, data);
    

    我尝试了以下代码-但我得到了错误:System.UriFormatException

    Console.WriteLine("proxy ip:");
    string proxyip = Console.ReadLine();
    Console.WriteLine("port");
    string proxyport = Console.ReadLine();
    string proxyaddress = (proxyip + ":" + proxyport);
    HttpWebRequest requestproxy = (HttpWebRequest)WebRequest.Create("url");
    WebProxy myproxy = new WebProxy(proxyaddress, false);
    requestproxy.Proxy = myproxy;
    HttpWebResponse responseproxy = (HttpWebResponse)requestproxy.GetResponse();
    Console.WriteLine("file path:");
    string fileName = Console.ReadLine();
    
    if (responseproxy.StatusCode == HttpStatusCode.OK)
    {
        Console.WriteLine("Page OK");
        Stream receiveStream = responseproxy.GetResponseStream();
        StreamReader readStream = null;
    
        if (responseproxy.CharacterSet == null)
        {
            readStream = new StreamReader(receiveStream);
        }
        else
        {
            readStream = new StreamReader(receiveStream, Encoding.GetEncoding(responseproxy.CharacterSet));
        }
    
        string data = readStream.ReadToEnd();
    
        responseproxy.Close();
        readStream.Close();
        Console.WriteLine(data);
        System.IO.File.WriteAllText(@fileName, data);   
    

    上面的代码有什么问题?

    2 回复  |  直到 10 年前
        1
  •  0
  •   8934904    10 年前

    在第一个示例中,您附加了一个字符串:

    HttpWebRequest请求=(HttpWeb请求)WebRequest.Create(urlAddress);

    在第二个示例中,您忘记将“url”更改为urlAddress字符串。

    HttpWebRequest requestproxy=(HttpWeb请求)WebRequest.Create(“url”);

    这将导致系统故障。UriFormatException错误。

        2
  •  0
  •   Xavier J    10 年前

    适用的WebProxy构造函数在其第一个参数中查找字符串(URL)或URI。

    来源: https://msdn.microsoft.com/en-us/library/system.net.webproxy.webproxy(v=vs.110).aspx

    主机名+“:”+端口号不符合字符串中URL的标准。你需要“ http://xxxxxx “或” https://xxxxx "