как установить useUnsafeHeaderParsing в коде
Я получаю следующее исключение:
сервер нарушил протокол. Section=ResponseHeader Detail=CR должен сопровождаться LF
отсюда вопрос:
Я понимаю, что мне нужно установить useUnsafeHeaderParsing в True.
вот мой код:
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
WebResponse myResp = myReq.GetResponse(); //exception is thrown here
useUnsafeHeaderParsing является свойством класса HttpWebRequestElement.
Как интегрировать его в вышеуказанный код?
большое спасибо!
2 ответов
вам нужно установить это в вашем интернете.конфигурации, внутри , например:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
Если по какой-то причине вы не хотите делать это из своей конфигурации, вы можете сделать это из кода, prgrammatically установив настройки конфигурации. См.на этой странице для примера.
Как указал Эдвин, вам нужно установить атрибут useUnsafeHeaderParsing в вашем интернете.config или app.конфигурационный файл. Если вы действительно хотите динамически изменять значение во время выполнения, вам придется прибегнуть к отражению, поскольку значение похоронено в экземпляре System.Net.Configuration.SettingsSectionInternal
и недоступно для общественности.
вот пример кода (на основе найденной информации здесь), что делает трюк:
using System;
using System.Net;
using System.Net.Configuration;
using System.Reflection;
namespace UnsafeHeaderParsingSample
{
class Program
{
static void Main()
{
// Enable UseUnsafeHeaderParsing
if (!ToggleAllowUnsafeHeaderParsing(true))
{
// Couldn't set flag. Log the fact, throw an exception or whatever.
}
// This request will now allow unsafe header parsing, i.e. GetResponse won't throw an exception.
var request = (HttpWebRequest) WebRequest.Create("http://localhost:8000");
var response = request.GetResponse();
// Disable UseUnsafeHeaderParsing
if (!ToggleAllowUnsafeHeaderParsing(false))
{
// Couldn't change flag. Log the fact, throw an exception or whatever.
}
// This request won't allow unsafe header parsing, i.e. GetResponse will throw an exception.
var strictHeaderRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8000");
var strictResponse = strictHeaderRequest.GetResponse();
}
// Enable/disable useUnsafeHeaderParsing.
// See http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/
public static bool ToggleAllowUnsafeHeaderParsing(bool enable)
{
//Get the assembly that contains the internal class
Assembly assembly = Assembly.GetAssembly(typeof(SettingsSection));
if (assembly != null)
{
//Use the assembly in order to get the internal type for the internal class
Type settingsSectionType = assembly.GetType("System.Net.Configuration.SettingsSectionInternal");
if (settingsSectionType != null)
{
//Use the internal static property to get an instance of the internal settings class.
//If the static instance isn't created already invoking the property will create it for us.
object anInstance = settingsSectionType.InvokeMember("Section",
BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, new object[] { });
if (anInstance != null)
{
//Locate the private bool field that tells the framework if unsafe header parsing is allowed
FieldInfo aUseUnsafeHeaderParsing = settingsSectionType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);
if (aUseUnsafeHeaderParsing != null)
{
aUseUnsafeHeaderParsing.SetValue(anInstance, enable);
return true;
}
}
}
}
return false;
}
}
}