gpt4 book ai didi

c# - WebException(状态 : Protocol Error)

转载 作者:可可西里 更新时间:2023-11-01 16:51:37 27 4
gpt4 key购买 nike

我正在使用 WebClient 类在 C# 中调用 url。以下是代码:-

    public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}

此代码失败并出现以下异常详细信息:-

System.Net.WebException: The remote server returned an error: (1201).
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)

Exception Status: ProtocolError

URL 正确命中服务器。服务器上的预期操作(更新数据库)正确发生。服务器正确发送响应。 WebClient 未处理响应。

我也尝试使用 HttpWebRequest 类但没有成功。

最初,在请求时存在类似问题。当我使用以下内容修改我的 app.config 时,它已解决:-

    <settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>

我不能在这个论坛上发布 URL,而且外网也无法访问它。

如果我在浏览器地址栏中复制相同的 URL,它会正常工作并返回预期的响应。

那么 Windows 应用程序可能有什么问题?

编辑 1

我实现了答案中的建议。我还在 this 的已接受答案中实现了建议问题。现在,我的函数如下所示:-

    public string SendWebRequest(string requestUrl)
{
using (var client = new WebClient())
{
client.Headers.Add("Accept", "text/plain");
client.Headers.Add("Accept-Language", "en-US");
client.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
client.Headers["Content-Type"] = "text/plain;charset=UTF-8";
string responseText = client.DownloadString(requestUrl);
return responseText;
}
}

还是没有解决问题。响应现在是空字符串 ("") 而不是 "Success"。确认这不是服务器故障。

如果我删除 app.config 中的配置,它会抛出其他异常。

System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at System.Net.WebClient.DownloadString(String address)

最佳答案

您的服务器正在返回 HTTP 1201,这不是 standard status code .

WebClient 在遇到不成功的状态代码(或无法识别的状态代码,在您的情况下)时将失败并出现异常。

我鼓励您使用新的 HttpClient如果可以的话上课:

public async Task<string> SendWebRequest(string requestUrl)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(requestUrl))
return await response.Content.ReadAsStringAsync();
}

如果你必须同步进行:

public string SendWebRequest(string requestUrl)
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = client.GetAsync(requestUrl).GetAwaiter().GetResult())
return response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}

关于c# - WebException(状态 : Protocol Error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704537/

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