- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我花了一整天的时间试图解决这个问题。我有一个自定义网络服务器,Chrome 或 POSTman ReST 客户端对它的请求工作正常。只要我在 c# 中使用 webclient 或 httpwebrequest,我就会得到:服务器违反了协议(protocol)。尝试将 zip 文件传输到客户端时,Section=ResponseStatusLine。
我试过:
public static bool SetAllowUnsafeHeaderParsing20()
{
//Get the assembly that contains the internal class
Assembly aNetAssembly = Assembly.GetAssembly(typeof(System.Net.Configuration.SettingsSection));
if (aNetAssembly != null)
{
//Use the assembly in order to get the internal type for the internal class
Type aSettingsType = aNetAssembly.GetType("System.Net.Configuration.SettingsSectionInternal");
if (aSettingsType != null)
{
//Use the internal static property to get an instance of the internal settings class.
//If the static instance isn't created allready the property will create it for us.
object anInstance = aSettingsType.InvokeMember("Section", BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, new object[] { });
if (anInstance != null)
{
//Locate the private bool field that tells the framework is unsafe header parsing should be allowed or not
FieldInfo aUseUnsafeHeaderParsing = aSettingsType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);
if (aUseUnsafeHeaderParsing != null)
{
aUseUnsafeHeaderParsing.SetValue(anInstance, true);
return true;
}
}
}
}
return false;
}
和
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
在 app.config 中。
我也试过 keep-alive=false 并且也弄乱了标题/
这是 web 请求,它在 client2Downloadfile 调用上失败:
private void sendManifest()
{
Uri remoteuri = new Uri(Properties.Settings.Default.masterurl);
SetAllowUnsafeHeaderParsing20();
using (WebClient client = new WebClient())
{
NameValueCollection reqparm = new NameValueCollection();
reqparm.Add("application", "TestApp");
reqparm.Add("manifest", manifest);
try
{
byte[] responsebytes = client.UploadValues(Properties.Settings.Default.masterurl, "POST", reqparm);
string responsebody = Encoding.UTF8.GetString(responsebytes);
if (responsebody != "")
{
using (WebClient client2 = new WebClient())
{
client2.DownloadFile(Properties.Settings.Default.masterurl + "//" + responsebody + "transfer.zip", "c:\\temp.zip");
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
可以在以下位置看到网络服务器响应:
http://gplus2.net:9532/97e456f0-9b57-4315-b03d-40a67f76d440/transfer.zip
非常感谢您提供任何帮助,因为我已经完全没有想法了。它显然是格式错误的服务器 header ,但我已将其保持在最低限度。
最佳答案
我遇到了同样的问题,我用下面的方法解决了。我创建了一个覆盖 GetWebRequestMethod 的自定义 Web 客户端。
class CustomWebClient : WebClient
{
/// <summary>
/// Returns a <see cref="T:System.Net.WebRequest" /> object for the specified resource.
/// </summary>
/// <param name="address">A <see cref="T:System.Uri" /> that identifies the resource to request.</param>
/// <returns>
/// A new <see cref="T:System.Net.WebRequest" /> object for the specified resource.
/// </returns>
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).KeepAlive = false;
}
return request;
}
}
然后我像这样用正常的方式发出请求
using (CustomWebClient client = new CustomWebClient())
{
client.Headers[HttpRequestHeader.Authorization] = "Basic " + base64String;
responseData = client.DownloadData(baseUri);
}
关于c# - 服务器违反了协议(protocol)。 C# 中的 Section=ResponseStatusLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747973/
我知道这篇文章可能看起来像是重复的,但我已经尝试了互联网上的所有解决方法,但我仍然不知道如何修复它。 我正在尝试从具有登录系统的 WEB 服务获取 xml 文件。我已经成功地登录并获取了 xml 文件
我创建了一个程序,试图在网站上发布一个字符串,但我收到了这个错误: "The server committed a protocol violation. Section=ResponseStatus
我花了一整天的时间试图解决这个问题。我有一个自定义网络服务器,Chrome 或 POSTman ReST 客户端对它的请求工作正常。只要我在 c# 中使用 webclient 或 httpwebreq
我正在尝试通过我的 asp.net 应用程序使用 tor 代理发送 httpwebrequest,但在调用 webresponse.GetResponse() 方法时收到此错误消息: The serv
我有一个 .NET 1.1 解决方案,其中所有项目都已升级到 .NET 4.0(VS2010、Windows 7)。为了解决“无法在 Web 服务器上开始调试”的问题,我将 Web 应用程序属性切换为
我正在尝试调用 Marketo SOAP Web 服务通过 ASP.NET/C#。我成功添加了 Web 服务引用并尝试使用这行代码调用它: SuccessGetLead lead = service.
我是一名优秀的程序员,十分优秀!