【发布时间】:2011-09-17 17:25:51
【问题描述】:
我想在 ASP.NET 中创建一个页面,该页面将向另一个非 ASP.NET URL 发送请求,并在那里检查一些内容,在我的情况下是检查域名是免费的,还是已经在采用。 (方法 = POST)因此,我想获得一个 HTML 代码,我将使用 RegEx 从中提取结果。最后一部分,我可以自己做:)))
【问题讨论】:
标签: asp.net html url post request
我想在 ASP.NET 中创建一个页面,该页面将向另一个非 ASP.NET URL 发送请求,并在那里检查一些内容,在我的情况下是检查域名是免费的,还是已经在采用。 (方法 = POST)因此,我想获得一个 HTML 代码,我将使用 RegEx 从中提取结果。最后一部分,我可以自己做:)))
【问题讨论】:
标签: asp.net html url post request
您可以使用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 解析器来处理结果。
【讨论】:
UploadValues 方法的第一个参数。
我的最终代码如下所示。正如你所说的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;
}
}
【讨论】: