c# - 使用 WebClient 下载字符串 - 404 错误
c# - DownloadString with WebClient - 404 Error
我正在尝试从 discord webhook 下载字符串:("https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK")
当我正常打开网站时,浏览器字符串是:{"message": "Unknown Webhook", "code": 10015}
但是当我使用 WebClient 执行此操作时:
WebClient wc = new WebClient();
string site = "https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK";
string x = wc.DownloadString(site);
它给出了“404 错误”。有没有办法用 c# 获取 {"message": "Unknown Webhook", "code": 10015} 字符串?
一个粗略的猜测是它与接受header有关。查看 api 的文档,但我的浏览器随请求发送了额外的 17 headers。
简单的答案是,使用 HttpClient
。推荐用于新开发,也在这里给出正确的响应:
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace discordapi_headers
{
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
var response = await client.GetAsync("https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK");
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}
}
但是,如果您做不到,那也无济于事。我现在也很感兴趣...
哈!我应该听听我自己的建议。对于 web 服务相关的东西,你不能打败 fiddler 和 postman。结果是 api 向具有 json 内容的浏览器返回自定义 404。
不幸的是,DownloadString 看到 404 并抛出 WebException。
这是一个可用的更新版本,使用 HttpClient 和 WebClient。
using System;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace discordapi_headers
{
class Program
{
static readonly string url = "https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK";
static async Task Main(string[] args)
{
Console.WriteLine(await UseHttpClient(url));
Console.WriteLine(await UseWebClient(url));
}
private static async Task<string> UseHttpClient(string url)
{
var client = new HttpClient();
var response = await client.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
private static async Task<string> UseWebClient(string url)
{
var client = new WebClient();
try
{
var response = await client.DownloadStringTaskAsync(url);
return response;
}
catch (WebException wex)
{
using (var s = wex.Response.GetResponseStream())
{
var buffer = new byte[wex.Response.ContentLength];
var contentBytes = await s.ReadAsync(buffer, 0, buffer.Length);
var content = Encoding.UTF8.GetString(buffer);
return content;
}
}
}
}
}
我正在尝试从 discord webhook 下载字符串:("https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK")
当我正常打开网站时,浏览器字符串是:{"message": "Unknown Webhook", "code": 10015}
但是当我使用 WebClient 执行此操作时:
WebClient wc = new WebClient();
string site = "https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK";
string x = wc.DownloadString(site);
它给出了“404 错误”。有没有办法用 c# 获取 {"message": "Unknown Webhook", "code": 10015} 字符串?
一个粗略的猜测是它与接受header有关。查看 api 的文档,但我的浏览器随请求发送了额外的 17 headers。
简单的答案是,使用 HttpClient
。推荐用于新开发,也在这里给出正确的响应:
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace discordapi_headers
{
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
var response = await client.GetAsync("https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK");
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}
}
但是,如果您做不到,那也无济于事。我现在也很感兴趣...
哈!我应该听听我自己的建议。对于 web 服务相关的东西,你不能打败 fiddler 和 postman。结果是 api 向具有 json 内容的浏览器返回自定义 404。
不幸的是,DownloadString 看到 404 并抛出 WebException。
这是一个可用的更新版本,使用 HttpClient 和 WebClient。
using System;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace discordapi_headers
{
class Program
{
static readonly string url = "https://discordapp.com/api/webhooks/704770710509453432/GdR4absQHKDKjUiNMpw3aIpX2tx-9Z7nmPE2Sn3TUkQDM12zUczaV-m80orh7WGVzvGK";
static async Task Main(string[] args)
{
Console.WriteLine(await UseHttpClient(url));
Console.WriteLine(await UseWebClient(url));
}
private static async Task<string> UseHttpClient(string url)
{
var client = new HttpClient();
var response = await client.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
private static async Task<string> UseWebClient(string url)
{
var client = new WebClient();
try
{
var response = await client.DownloadStringTaskAsync(url);
return response;
}
catch (WebException wex)
{
using (var s = wex.Response.GetResponseStream())
{
var buffer = new byte[wex.Response.ContentLength];
var contentBytes = await s.ReadAsync(buffer, 0, buffer.Length);
var content = Encoding.UTF8.GetString(buffer);
return content;
}
}
}
}
}