restsharp accept-encoding отключает сжатие

В конкретном случае мне нужно иметь возможность отключить сжатие в запросе/ответе.

Используя Firefox RestClient, я могу опубликовать некоторый xml в веб-службе и успешно получить некоторый ответ xml с одним параметром заголовка «Accept-Encoding»: «», который, если я не установлю этот заголовок, тело ответа вернется сжатым с некоторые бинарные данные в теле ответа (поэтому я хочу отключить gzip в ответ)

Теперь, используя то же значение заголовка в моем приложении (используя RestSharp в C#), я все равно получаю в ответ двоичные данные (gzip).

Может кто-нибудь пролить свет? Поддерживается ли он в RestSharp?


person user3801443    schedule 03.07.2014    source источник


Ответы (4)


RestSharp не поддерживает отключение сжатия.

Если вы посмотрите на исходный код в Http.Sync.cs строке 267 (при условии запроса на синхронизацию, асинхронный код дублируется в Http.Async.cs строке 424)

webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.None;

то есть базовый WebRequest, который Restsharp использует для выполнения http-вызова, имеет жестко закодированные параметры сжатия. Существует открытая проблема, которая документирует это

person wal    schedule 02.10.2014

Функцию (только что) вроде бы добавили, но украдкой — без примечаний ни о статусе проблемы, ни об логах изменений. Возможно, потому что он не был достаточно протестирован?

Тем не менее, у меня недавно возникла потребность в этом функционале, и я протестировал его - и он работает. Просто установите для свойства AutomaticDecompression экземпляра RestClient значение false.

Если вы хотите, чтобы ваш экземпляр RestClient прожил долго, не забудьте сделать это перед его первым использованием — кажется, что настройка «заблокирована» после использования и не может измениться после этого. В моем случае мне нужно было совершать вызовы с AutomaticDecompression и без него, поэтому я просто создал два разных экземпляра RestClient.

person Bo Ngoh    schedule 30.11.2017
comment
Я попробовал это. Он компилируется, но функция кажется сломанной или я делаю это неправильно. Данные по-прежнему автоматически распаковываются для меня. Ветка, упомянутая в ответе Бо Нго, находится здесь: github.com/restsharp/RestSharp/issues/561 - person JamesHoux; 12.07.2018

Используя RestSharp v106.11.4, я не смог отключить автоматическую распаковку, как предложил Бо Нго. Я установил AutomaticDecompression для экземпляра RestClient в момент его создания, но заголовок Accept-Encoding все же был добавлен.

Способ установить это и отключить декомпрессию — использовать метод ConfigureWebRequest, который доступен в файле RestClient. Фрагмент ниже позволил мне отключить эту функцию:

var client = new RestClient();
client.ConfigureWebRequest(wr =>
{
    wr.AutomaticDecompression = DecompressionMethods.None;
});
person Carl Heinrich Hancke    schedule 05.06.2020

Не уверен, что это актуально, но, возможно, для будущих ссылок

RestRequest имеет IList<DecompressionMethods> AllowedDecompressionMethods, а при создании нового RestRequest список пуст. Только при вызове метода Execute он заполняется значениями по умолчанию (None, Deflate и GZip), если он не пуст.

Чтобы обновить нужный метод декомпрессии, просто используйте метод с именем AddDecompressionMethod и добавьте нужный метод декомпрессии — и все.

Пример:

var client = new RestClient();
var request = new RestRequest(URL, Method.GET, DataFormat.None);
request.AddDecompressionMethod(DecompressionMethods.GZip);
var response = client.Execute(request);
person Maoz    schedule 03.11.2020