如何在C#中填写表单并使用Webclient提交

27 c# webclient

我很擅长在C#中使用库WebClient,HttpResponse和HttpRequest,所以请耐心等待我的问题.

我需要构建一个基于C#的WinForm,它可以打开一个URL,该URL通过基本授权进行保护.我这样做是将它添加到标题中,如下所示:

using (WebClient wc = new WebClient())
{
    wc.Headers.Add(HttpRequestHeader.Authorization, "Basic " +
    Convert.ToBase64String(
    Encoding.ASCII.GetBytes(username + ":" + password)));
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好!现在我想填写一个带有数字的表单,然后我从网站上找到源代码,并发现名称是"数字".所以我写这个:

NameValueCollection formData = new NameValueCollection();  
formData["number"] = number
byte[] responseBytes = wc.UploadValues(theurl, "POST", formData);
string response = Encoding.ASCII.GetString(responseBytes);
textBox_HTML.Text = response; 
Run Code Online (Sandbox Code Playgroud)

但是我该怎么提交呢?我想收到我的"搜索结果"......

BFr*_*ree 49

你可能应该HttpWebRequest为此而使用.这是一个简单的例子:

var strId = UserId_TextBox.Text;
var strName = Name_TextBox.Text;

var encoding=new ASCIIEncoding();
var postData="userid="+strId;
postData += ("&username="+strName);
byte[]  data = encoding.GetBytes(postData);

var myRequest =
  (HttpWebRequest)WebRequest.Create("http://localhost/MyIdentity/Default.aspx");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
var newStream=myRequest.GetRequestStream();
newStream.Write(data,0,data.Length);
newStream.Close();

var response = myRequest.GetResponse();
var responseStream = response.GetResponseStream();
var responseReader = new StreamReader(responseStream);
var result = responseReader.ReadToEnd();

responseReader.Close();
response.Close();
Run Code Online (Sandbox Code Playgroud)

  • 因此,那些花时间用你不喜欢的编码风格写出代码示例的人正在贬低*比实际提供答案更有帮助.有趣.... (54认同)
  • 这是一个非常好的答案,var和符号是无关紧要的. (6认同)
  • 谢谢你的回答.我使用HttpWebrequest没有问题,但是我看到它的方式,代码中没有任何内容填写搜索表单并提交.这是我的主要问题. (3认同)
  • 我通常也不使用匈牙利表示法,当我回答这个问题时,我必须复制并粘贴该代码.至于var,我用它很多,我会捍卫它! (3认同)
  • 我不同意你们的意见.我可以看看这些变量中的每一个,并告诉你没有IDE它们是什么. (2认同)
  • C# 中的 @GeorgeStocker var 与 Visual Basic 中的 var 不同。在 C# 中,使用 var 关键字声明的变量是强类型的,编译器将 var 替换为具体类型。https://msdn.microsoft.com/en-us/library/bb383973.aspx (2认同)

小智 39

试试这个:

using System.Net;
using System.Collections.Specialized;  

NameValueCollection values = new NameValueCollection();
values.Add("TextBox1", "value1");
values.Add("TextBox2", "value2");
values.Add("TextBox3", "value3");
string Url = urlvalue.ToLower();

using (WebClient client = new WebClient())
{
    client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    byte[] result = client.UploadValues(Url, "POST", values);
    string ResultAuthTicket = System.Text.Encoding.UTF8.GetString(result);
}
Run Code Online (Sandbox Code Playgroud)