gpt4 book ai didi

C#从网站下载PNG文件并在请求中发送cookie?

转载 作者:可可西里 更新时间:2023-11-01 16:38:18 25 4
gpt4 key购买 nike

您好,我正在尝试从网站下载 .PNG 图片,但我需要在下载图片的请求中发送 header 。我的最终目标是将图像直接加载到流中,而不是将其保存到文件中。

这是我获取图片 HTML 的代码:

public string Request(string type, string page, string data = "", string referer = "")
{
using(TcpClient tcp = new TcpClient(this.SiteName, this.Port))
{
byte[] headers = Encoding.Default.GetBytes(this.MakeHeaders(type, page, referer, data));
using (NetworkStream ns = tcp.GetStream())
{
ns.Write(headers, 0, headers.Length);
using (StreamReader sr = new StreamReader(ns, Encoding.Default))
{
string html = sr.ReadToEnd();
return html;
}
}
}
}

我发送的 header 如下所示:

GET /image.php HTTP/1.1
Host: greymatter.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Connection: close
Cache-Control: max-age=0
Cookie: PHPSESSID=s0v17eafosj5ctb5v6keu3lh57; __cfduid=d10aef4fcfd052e1f59fba9832cedf4491374611636

我保存在本地的 PNG 文件开头为:

67f
‰PNG

保存的 PNG 文件已损坏 - 无法查看!我不明白为什么会这样?

最佳答案

该请求是针对 php 文档的请求。网站的各个 Assets 是单独下载的。因此,单个 TCP 请求可能无法涵盖您打算执行的操作。我推荐 Fiddler查看为请求网页所做的调用。

另外我会考虑使用 Image.FromStream()将流转换为 png。 (只是一个偏好。使用字节数组和数据流对我来说一直特别容易出错。)

它使用了类似这样的东西。

byte[] imageData = MyRequestFunction(Url); //MyRequestFunction function from here
MemoryStream stream = new MemoryStream(imageData);
Image img = Image.FromStream(stream);
stream.Close();

另外web requests专为您正在做的事情而设计。这个例子可能会有所帮助。
How to read picture from URL and show it on my page

关于C#从网站下载PNG文件并在请求中发送cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820596/

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