首页 > 其他分享 > HttpWebRequestElement.UseUnsafeHeaderParsing Property

HttpWebRequestElement.UseUnsafeHeaderParsing Property

时间:2023-08-24 20:34:42浏览次数:61  
标签:null assembly HttpWebRequestElement System internal using UseUnsafeHeaderParsing

目录

异常信息

System.Net.WebException:“服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF”

解决办法

一、通过配置文件实现

web.config或app.config中设置如下属性

<system.net> 
    <settings> 
    <httpWebRequest useUnsafeHeaderParsing="true" /> 
    </settings> 
</system.net> 

二、通过代码实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Configuration;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace UnsafeHeaderParsingSample
{
    internal class Program
    {
        private 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;
        }
    }
}

相关参考

  1. 如何在代码中设置useUnsafeHeaderParsing
  2. HttpWebRequestElement.UseUnsafeHeaderParsing Property
  3. SettingsSectionInternal

标签:null,assembly,HttpWebRequestElement,System,internal,using,UseUnsafeHeaderParsing
From: https://www.cnblogs.com/lanwah/p/17655096.html

相关文章

  • python @property装饰器实现原理
    @property装饰器可以使一个对象的方法变成属性访问,比较方便,那么它是如何实现的呢?下面是一个自己动手实现的例子:classMyProperty:def__init__(self,fget=None,fset=None):self.fget=fgetself.fset=fsetdef__get__(self,instance,o......
  • CustomPropertyDrawer
    Unity3DCustomPropertyDrawer自定义属性绘制器api文档该文档中的EditorGUI.BeginProperty()和EditorGUI.EndProperty(),不好用参考案例:直接看Unity中你感兴趣的渲染方式的实现方式:Packages/com.unity.ugui/Editor/UI/PropertyDrawers/...FontDataDrawerSpriteS......
  • 20.python@property
    python@property目录python@property作用property()函数@property装饰器python的@property是python的一种装饰器,是用来修饰方法的。作用我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止......
  • system.getProperty是一个用于获取系统属性的方法
    system.getProperty是一个用于获取系统属性的方法。系统属性是指与特定运行环境相关的参数和配置信息,通过该方法可以获取这些信息并对程序进行适当的调整和优化。1.什么是系统属性?系统属性是通过系统的配置文件或命令行参数来设置的一些参数和配置信息。腻子粉网站可以影响程序......
  • 谷粒商城报错:java.lang.IllegalStateException: Failed to load property source from
    遇到这种问题如果检查了配置文件没有出错可以尝试打开target文件,去找配置文件,查看是否为空或者中文乱码,一般情况下删除中文注释就可以,因为这个文件的编码格式是GBK,项目的编码格式是UTF-8,注释乱码,导致编译失败。还有另一种做法就是更改编码。......
  • 关于Objective-C头文件中的property为readonly,外部还能set成功
    起初是同事和我说,property为readonly,外部还能set成功。实在没想明白。常规的写法,.m中可以直接set成功,而外部创建的FCTest对象,无法set成功(见FCObject)。FCTest.h@interfaceFCTest:NSObject@property(nonatomic,copy,readonly)NSString*name;@endFCTest.m@inte......
  • [Vue warn]: Property or method "todoName" is not defined on the instance but ref
    错误原因先上报错截图报错翻译:解决办法首先需要保证初始化属性时该属性是被动的,两种情况是在数据选项中,是一些基于类的组件。在vue的template中使用了该属性,但是在data或者methods中还并没有被定义,就被使用了,造成了这个错误。在data中定义一下这个数据或者在met......
  • 解决 heatmap.js 'Cannot assign to read only property 'data' of object' 问题与 p
    一、问题背景问题是这样发生的,因为项目中需要实现热力图的功能,所以使用了第三方的库heatmap.js。但是在一些浏览器中使用它时,会出现这个错误:>UncaughtTypeError:Cannotassigntoreadonlyproperty'data'ofobject'#<ImageData>'出现问题的原因是因为img.data=im......
  • 谈谈对Object.defineProperty的理解
    在Vue2实现数据和页面的绑定和双向绑定使用的就是Object.defineProperty方法,然后看到Vue-Router源码的时候发现了一个有趣的事情.就是:通过代理B得到了A对象,其实是相当于B和A其实都指向了同一个地址值,我们在使用Vue的时候去改变或者拿取值一直都是通过A去拿的,在Vue里面他代理......
  • 浅谈-BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(Object targe
    BeanWrapper是SpringFramework中的一个接口,它提供了一种方便的方式来访问Java对象的属性,并允许对属性进行读取和设置操作。PropertyAccessorFactory.forBeanPropertyAccess(this)是一个工厂方法,用于创建一个BeanWrapper对象,以便访问指定的Java对象的属性。举个例子来......