gpt4 book ai didi

C#使用登录从网络下载文件

转载 作者:太空狗 更新时间:2023-10-30 01:06:40 24 4
gpt4 key购买 nike

我已经可以使用此代码通过重定向(我正在保存 cookie)登录网页

   CookieCollection cookies = new CookieCollection();
HttpWebRequest cookieRequest = (HttpWebRequest)WebRequest.Create("https://www.loginpage.com/");
cookieRequest.CookieContainer = new CookieContainer();
cookieRequest.CookieContainer.Add(cookies);
HttpWebResponse cookieResponse = (HttpWebResponse)cookieRequest.GetResponse();
cookies = cookieResponse.Cookies;

string postData = "name=********&password=*********&submit=submit";
HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("https://www.loginpage.com/");
loginRequest.CookieContainer = new CookieContainer();
loginRequest.CookieContainer.Add(cookies);
loginRequest.Method = WebRequestMethods.Http.Post;
loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
loginRequest.AllowWriteStreamBuffering = true;
loginRequest.ProtocolVersion = HttpVersion.Version11;
loginRequest.AllowAutoRedirect = true;
loginRequest.ContentType = "application/x-www-form-urlencoded";

byte[] byteArray = Encoding.ASCII.GetBytes(postData);
loginRequest.ContentLength = byteArray.Length;
Stream newStream = loginRequest.GetRequestStream(); //open connection
newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
newStream.Close();

这工作正常,但我需要从那里下载 .xls 文件,它位于此处(例如)

https://www.loginpage.com/export_excel.php?export_type=list

为此我尝试了这段代码

     HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("https://www.loginpage.com/export_excel.php?export_type=list");
HttpWebResponse ws = (HttpWebResponse)wr.GetResponse();
Stream str = ws.GetResponseStream();
byte[] inBuf = new byte[100000];
int bytesReadTotal = 0;
string path = @"d:\test.xlsx";
FileStream fstr = new FileStream(path, FileMode.Create, FileAccess.Write);
while (true)
{
int n = str.Read(inBuf, 0, 100000);
if ((n == 0) || (n == -1))
{
break;
}

fstr.Write(inBuf, 0, n);

bytesReadTotal += n;
}
str.Close();
fstr.Close();

但它不起作用,现在我被困住了

        string dLink = "https://www.loginpage.com/export_excel.php?export_type=list";
HttpWebRequest fileRequest = (HttpWebRequest)HttpWebRequest.Create(dLink);
fileRequest.CookieContainer = new CookieContainer();
fileRequest.CookieContainer.Add(cookies);
fileRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
HttpWebResponse fileResponse = (HttpWebResponse)fileRequest.GetResponse();

for (int i = 0; i < fileResponse.Headers.Count; ++i)
richTextBox1.Text += "\nHeader Name: " + fileResponse.Headers.Keys[i] + ", Value :" + fileResponse.Headers[i];

当然不是下载文件。我现在正在尝试获取 header 以了解我从网络上获得的信息?我已经使用我的脚本从文件共享页面(如 rghost 或 filehippo)下载了一些文件,但这个不起作用。

最佳答案

这应该可以完成工作!

        CookieContainer cookieJar = new CookieContainer();
CookieAwareWebClient http = new CookieAwareWebClient(cookieJar);

string postData = "name=********&password=*********&submit=submit";
string response = http.UploadString("https://www.loginpage.com/", postData);

// validate your login!

http.DownloadFile("https://www.loginpage.com/export_excel.php?export_type=list", "my_excel.xls");

我用过CookieAwareWebClient

public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public Uri Uri { get; set; }

public CookieAwareWebClient()
: this(new CookieContainer())
{
}

public CookieAwareWebClient(CookieContainer cookies)
{
this.CookieContainer = cookies;
}

protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = this.CookieContainer;
}
HttpWebRequest httpRequest = (HttpWebRequest)request;
httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
return httpRequest;
}

protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];

if (setCookieHeader != null)
{
//do something if needed to parse out the cookie.
if (setCookieHeader != null)
{
Cookie cookie = new Cookie(); //create cookie
this.CookieContainer.Add(cookie);
}
}
return response;
}
}

Source & Credit for : CookieAwareWebClient

关于C#使用登录从网络下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com