繁体   English   中英

C#HTTP编程

[英]C# HTTP programming

我想构建一个可以处理某些html表单的软件,该软件将是一种可以自动处理我网站上的某些表单的bot。

有谁可以给​​我一些基本的步骤来完成这项工作...任何教程,示例,书籍或任何可以帮助我的东西。

你们中的一些人可以使用POST方法发布有效的代码吗?

查看如何:使用WebRequest类发送数据 它提供了一个示例,说明如何使用HttpWebRequest类创建一个页面发布到另一个页面。

填写表格...

  1. 找到要填写的所有INPUT或TEXTAREA元素。
  2. 构建要发送回服务器的数据字符串。 该字符串的格式类似于“ name1 = value1&name2 = value2”(就像在查询字符串中一样)。 每个值都需要进行URL编码。
  3. 如果表单的“方法”属性为“ GET”,则在“操作”属性中获取URL,并添加“?”。 和数据字符串,然后对URL进行“ GET” Web请求。
  4. 如果表单的“方法”为“ POST”,则数据将在Web请求的其他区域中提交。 此页面上查看C#代码。

扩展David和JP的答案:

假设您正在使用内容不熟悉的表单,则可能...

  1. 通过HttpWebRequest拉表单的页面。
  2. 加载到XmlDocument中
  3. 使用XPath遍历/选择表单元素。
  4. 根据这些元素构建查询字符串/发布数据。
  5. 使用HttWebRequest发送数据

如果表单的结构是事先已知的,那么您真的可以从#4开始。

(未经测试的)示例(我的XPath不好,所以语法几乎肯定不太正确):

HttpWebRequest request;
HttpWebResponse response;
XmlDocument xml = new XmlDocument();
string form_url = "http://...."; // you supply this
string form_submit_url;
XmlNodeList element_nodes;
XmlElement form_element;
StringBuilder query_string = new StringBuilder();

// #1
request = (HttpWebRequest)WebRequest.Create(form_url));
response = (HttpWebResponse)request.GetResponse();

// #2
xml.Load(response.GetResponseStream());

// #3a
form_element = xml.selectSingleNode("form[@name='formname']");
form_submit_url = form_element.GetAttribute("action");

// #3b
element_nodes = form_element.SelectNodes("input,select,textarea", nsmgr)

// #4
foreach (XmlNode input_element in element_nodes) {
  if (query_string.length > 0) { query_string.Append("&"); }
  // MyFormElementValue() is a function/value you need to provide/define.
  query_string.Append(input_element.GetAttribute("name") + "=" + MyFormElementValue(input_element.GetAttribute("name"));
}

// #5
// This is a GET request, you can figure out POST as needed, and deduce the submission type via the <form> element's attribute.
request = (HttpWebRequest)WebRequest.Create(form_submit_url + "?" + query_string.ToString()));

参考文献:

如果您不想走HttpWebRequest路线,我建议您使用WatiN 使IE或Firefox自动化非常容易,而不必担心HTTP请求的内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM