[英]C# HttpWebRequest Post Method many parameters in form
我正在編寫一個簡單的C#程序來做一些Web請求和發布數據。 我理解基礎知識如何工作如何使用密碼和html表單的東西登錄。 但是我想知道是否有很多輸入參數(例如這個問題頁面),如復選框和文本字段,是否有任何有效的方法比硬編碼字符串中的20個參數並傳入它? 我可以讀取html文件解析它並掃描輸入並使用String builder來制作這樣的字符串,但我想知道是否有比這更有效的方法呢?
private HtmlAgilityPack.HtmlDocument getpage(string url ,String input)
{
try
{
Stream datastream;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.AllowAutoRedirect = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
request.ContentType = "application/x-www-form-urlencoded";
if (input!=null)
{
String postData = "";
request.Method = "POST";
if (input == "login")
{
postData = String.Format("username={0}&password={1}", "myusername", "mypassword");
}
else if (input == "sendMessage")
{
//THIS IS THE LONG STRING THAT I DON'T WANT TO HARD CODE
postData = String.Format("reciever={0}&sendmessage={1}", "thepersontomessage" ,this.DefaultMessage);
//I am just puting two parameters for now, there should be alot
}
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
datastream = request.GetRequestStream();
datastream.Write(byteArray, 0, byteArray.Length);
datastream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
datastream = response.GetResponseStream();
String sourceCode = "";
using (StreamReader reader = new StreamReader(datastream))
{
sourceCode = reader.ReadToEnd();
}
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(sourceCode);
this.cookies.Add(response.Cookies);
return htmlDoc;
}
catch (Exception)
{
return null;
}
還有一種簡單的方法可以查看當我在瀏覽器中單擊html表單上的按鈕時設置的參數值(基本上是post url字符串和發送的參數值),因此我可以將這些值硬編碼到Postdatastring中(復選框,文本等)
我個人會做的是將參數構建為Dictionary<string,string>
這樣你就可以這樣做:
var parms = new Dictionary<string,string>();
parms.Add("username","fred");
然后你可以有一個方法,如:
string DictToString(Dictionary<string,string> dict)
{
StringBuilder builder = new StringBuilder();
foreach(KeyValuePair<string,string> kvp in dict) {
builder.Append(kvp.Key + "=" + kvp.Value + "&");
}
return builder.ToString();
}
然后,您可以使用以下命令獲取最終參數字符
var parms_str = builder.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.