【问题标题】:Post request to another URL from ASP.NET从 ASP.NET 向另一个 URL 发布请求
【发布时间】:2011-09-17 17:25:51
【问题描述】:

我想在 ASP.NET 中创建一个页面,该页面将向另一个非 ASP.NET URL 发送请求,并在那里检查一些内容,在我的情况下是检查域名是免费的,还是已经在采用。 (方法 = POST)因此,我想获得一个 HTML 代码,我将使用 RegEx 从中提取结果。最后一部分,我可以自己做:)))

【问题讨论】:

    标签: asp.net html url post request


    【解决方案1】:

    您可以使用WebClient 发送 POST 请求并获取远程资源的内容:

    using (var client = new WebClient())
    {
        var values = new NameValueCollection
        {
            { "param1", "value 1" },
            { "param2", "value 2" },
        };
        byte[] result = client.UploadValues("http://example.com/foo", values);
        // TODO: process the results
    }
    

    我将使用 RegEx 从中提取结果。最后一部分,我可以自己做:)

    我希望您了解对parsing HTML with Regex 的一般意见。因此,即使您自己可以做到这一点,也不要这样做。使用诸如HTML Agility Pack 之类的HTML 解析器来处理结果。

    【讨论】:

    • 谢谢。对不起,愚蠢的问题,但我不明白我在哪里可以指定我发布的 URL? client.UploadValues("my.url", values); ???
    • @Armen Sarkisian,是的,您将其指定为 UploadValues 方法的第一个参数。
    • @Armen Sarkisian,如果这篇文章帮助你解决了问题,请点击旁边的勾号mark it as answer
    【解决方案2】:

    我的最终代码如下所示。正如你所说的RegEx 不起作用,我使用了简单的IndexOf

            string domain = tb_domain.Text;
            string level = ddl_level.SelectedValue;
            string html = "";
    
            using (var client = new WebClient())
            {
                var values = new NameValueCollection
                {
                    { "whois_search", domain },
                    { "domainEnd", level  },
                };
    
    
                byte[] res = client.UploadValues("http://registration.ge/index.php?page=11&lang=geo", values);
                for (int i = 0; i < res.Length; i++)
                {
                    int a = Convert.ToInt32(res[i]);
                    char c = Convert.ToChar(a);
                    html += Convert.ToString(c);
                }
    
                int ind = html.IndexOf("Registrant");
    
                if (ind == -1)
                {
                    lbl_result.Text = "The domain is free, you can register it";
                    lbl_result.ForeColor = System.Drawing.Color.Green;
                }
                else
                {
                    lbl_result.Text = "The Domain is used";
                    lbl_result.ForeColor = System.Drawing.Color.Red;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多