2007年8月24日星期五

(转)包含Cookie的HttpWebRequest 向网站发送数据

/*向一个地址发送数据*/
using System;
using System.IO;
using System.Net;
using System.Windows.Forms;

namespace StringResourceTool
{
public class TranslationServer
{
TextBox output;
string baseURL = "http://developer.sharpdevelop.net/corsavy/translation/";
public TranslationServer(TextBox output)
{
this.output = output;
}
CookieContainer cookieContainer = new CookieContainer();
public bool Login(string user, string pwd)
{
output.Text = "Contacting server...";
Application.DoEvents();
System.Threading.Thread.Sleep(50);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseURL + "logon.asp");
request.ContentType = "application/x-www-form-urlencoded";
string postString = "uname=" + user + "&upwd=" + pwd;
request.ContentLength = postString.Length;
request.CookieContainer = cookieContainer;
request.Method = "POST";
request.AllowAutoRedirect = false;
Stream s = request.GetRequestStream();
using (StreamWriter w = new StreamWriter(s)) {
w.Write(postString);
}
s.Close();
string result;
using (StreamReader r = new StreamReader(request.GetResponse().GetResponseStream())) {
result = r.ReadToEnd();
}
if (result.Contains("You couldn't be logged on")) {
output.Text += "\r\nInvalid username/password.";
return false;
}
output.Text += "\r\nLogin successful.";
return true;
}
public void DownloadDatabase(string targetFile, EventHandler successCallback)
{
WebClient wc = new WebClient();
wc.Headers.Set("Cookie", cookieContainer.GetCookieHeader(new Uri(baseURL)));
wc.DownloadProgressChanged += delegate(object sender, DownloadProgressChangedEventArgs e) {
output.BeginInvoke((MethodInvoker)delegate {
output.Text = "Download: " + e.ProgressPercentage + "%";
});
};
wc.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) {
output.BeginInvoke((MethodInvoker)delegate {
if (e.Error != null)
output.Text = e.Error.ToString();
else
output.Text = "Download complete.";
});
if (e.Error == null) {
using (FileStream fs = new FileStream(targetFile, FileMode.Create, FileAccess.Write)) {
fs.Write(e.Result, 0, e.Result.Length);
}
successCallback(this, EventArgs.Empty);
}
wc.Dispose();
};
wc.DownloadDataAsync(new Uri(baseURL + "CompactNdownload.asp"));
}

public void AddResourceString(string idx, string value, string purpose)
{
WebClient wc = new WebClient();
wc.Headers.Set("Cookie", cookieContainer.GetCookieHeader(new Uri(baseURL)));
wc.Headers.Set("Content-Type", "application/x-www-form-urlencoded");
wc.UploadString(new Uri(baseURL + "owners_AddNew.asp"),
"Idx=" + Uri.EscapeDataString(idx)
+ "&PrimaryResLangValue=" + Uri.EscapeDataString(value)
+ "&PrimaryPurpose=" + Uri.EscapeDataString(purpose));
}

public void DeleteResourceStrings(string[] idx)
{
const int threadCount = 3; // 3 parallel calls
output.Text = "Deleting...";
int index = 0;
int finishCount = 0;
EventHandler callback = null;
callback = delegate {
lock (idx) {
if (index < finishcount ="="" i =" 0;" wc =" new" idx=" + Uri.EscapeDataString(idx) + " reallydelete="on">

没有评论: