Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 12.08.09 10:54
Оценка:
Добрый день.

Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.
В чём различие между этими двумя средствами работы с HTTP?

Вот выдержка из старого кода:
  var xmlhttp = WScript.CreateObject("Msxml2.XMLHTTP");
  xmlhttp.open("POST", url, false);            // not async
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.send(request);


Вот код на C#, в котором я пытаюсь это воспроизвести:
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.ContentLength = postBytes.Length;

request.ProtocolVersion = HttpVersion.Version10;

var postStream = request.GetRequestStream();
postStream.Write(postBytes, 0, postBytes.Length);
postStream.Close();

var responseStreamReader = new StreamReader(
request.GetResponse().GetResponseStream());


Url и само тело запроса в обоих случая абсолютно одинаковы.
Re: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: Andir Россия
Дата: 12.08.09 11:15
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.

0>В чём различие между этими двумя средствами работы с HTTP?

Понять в чём проблема можно с помощью HTTP-сниффера Fiddler. Смотришь отправляемые запросы и выясняешь в чём разница.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1233 ) { /* Работаем */ }
Re: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.08.09 11:29
Оценка: 2 (1)
Здравствуйте, 0x7be, Вы писали:

0>Добрый день.


0>Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.

0>В чём различие между этими двумя средствами работы с HTTP?
Навскидку отличий не видно. Подсмотри Fiddlerом точный вид получаемых запросов. Скорее всего, XMLHTTP дописывает некие хидеры.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 12.08.09 11:30
Оценка:
Здравствуйте, Andir, Вы писали:

A>Здравствуйте, 0x7be, Вы писали:


0>>Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.

0>>В чём различие между этими двумя средствами работы с HTTP?

A>Понять в чём проблема можно с помощью HTTP-сниффера Fiddler. Смотришь отправляемые запросы и выясняешь в чём разница.

Тут есть один чудовищный нюанс, о котором я забыл сказать — протокол на самом деле HTTPS. Идея со сниффером мне в голову приходила, но траффик-то шифрованный идет. Вообщем, ничего я в сниффере так и не увидел
Re[3]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: Andir Россия
Дата: 12.08.09 11:34
Оценка: 2 (1)
Здравствуйте, 0x7be, Вы писали:

A>>Понять в чём проблема можно с помощью HTTP-сниффера Fiddler. Смотришь отправляемые запросы и выясняешь в чём разница.

0>Тут есть один чудовищный нюанс, о котором я забыл сказать — протокол на самом деле HTTPS. Идея со сниффером мне в голову приходила, но траффик-то шифрованный идет. Вообщем, ничего я в сниффере так и не увидел

Fiddler умеет и шифрованный трафик смотреть с помощью внедрения в процесс обмена данными (на основе атаки man-in-middle). Настойчиво рекомендую.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1233 ) { /* Работаем */ }
Re[4]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 12.08.09 11:56
Оценка:
Здравствуйте, Andir, Вы писали:

0>>Тут есть один чудовищный нюанс, о котором я забыл сказать — протокол на самом деле HTTPS. Идея со сниффером мне в голову приходила, но траффик-то шифрованный идет. Вообщем, ничего я в сниффере так и не увидел

A>Fiddler умеет и шифрованный трафик смотреть с помощью внедрения в процесс обмена данными (на основе атаки man-in-middle). Настойчиво рекомендую.
Любопытно! Я, правда, по-другом сниффером воспользовался. Я поправил url на использование http вместо https. Сервер, понятно дело, дал мне отлуп, зато я сравнил сами запросы. Как тут рядом предположил тов. Sinclair, msxml напихал в запрос кучу заголовков по сравнению с HttpWebRequest`ом. Сейчас над ними медитирую.
Re[2]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 12.08.09 12:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Навскидку отличий не видно. Подсмотри Fiddlerом точный вид получаемых запросов. Скорее всего, XMLHTTP дописывает некие хидеры.

Да, он прописывает букет дополнительных хидеров. Попробовал добавить их в HttpWebRequest — не помогло
Копаю дальше.
Re: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: cadet354 Россия
Дата: 12.08.09 13:12
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Добрый день.


0>Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.


на сколько разные, если обрезаются то скорее всего в chanked дело (HttpVersion.Version10)
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[2]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 12.08.09 13:16
Оценка:
Здравствуйте, cadet354, Вы писали:

0>>Есть старый код на JavaScript, отсылающий HTTP POST запрос на сервер, используя для этого Msxml2.XMLHTTP. Я этот код переписываю на C# с использованием HttpWebRequest. Фишка в том, что результаты исполнения запроса получаются разные.

C>на сколько разные, если обрезаются то скорее всего в chanked дело (HttpVersion.Version10)
Ну, есть веб-сервер, на котором крутится софт. При обращении из msxml.xmlhttp этот сервер нормально обрабатывает запрос и возвращает короткое чисто текстовое сообщение, уведомляющее об успехе. Если же запускать HttpWebRequest, то возвращается веб-форма, предлагающая вручную ввести все параметры. Выглядит это как если опустить параметры обращения к серверу.
Re: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: Воронков Василий Россия  
Дата: 12.08.09 23:35
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Вот код на C#, в котором я пытаюсь это воспроизвести:

0>
0>request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
0>request.ContentLength = postBytes.Length;

0>request.ProtocolVersion = HttpVersion.Version10;

0>var postStream = request.GetRequestStream();
0>postStream.Write(postBytes, 0, postBytes.Length);
0>postStream.Close();

0>var responseStreamReader = new StreamReader(
0>request.GetResponse().GetResponseStream());
0>

0>Url и само тело запроса в обоих случая абсолютно одинаковы.

А метод в POST вы устанавливаете?
Re[3]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 13.08.09 03:48
Оценка: 2 (1)
Здравствуйте, 0x7be, Вы писали:

0>Ну, есть веб-сервер, на котором крутится софт. При обращении из msxml.xmlhttp этот сервер нормально обрабатывает запрос и возвращает короткое чисто текстовое сообщение, уведомляющее об успехе. Если же запускать HttpWebRequest, то возвращается веб-форма, предлагающая вручную ввести все параметры. Выглядит это как если опустить параметры обращения к серверу.


Гыы, 99,(9)% в куках каких-нить дело
[КУ] оккупировала армия.
Re[2]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 13.08.09 06:29
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А метод в POST вы устанавливаете?

Да, устанавливаю. Просто эту строчку забыл в сообщение скопировать.
Re[4]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 13.08.09 06:30
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Гыы, 99,(9)% в куках каких-нить дело

Я вообще в этой области не спец, так что раскройте, плз, мысль
Re[4]: Отличие HttpWebRequest от Msxml2.XMLHTTP
От: 0x7be СССР  
Дата: 13.08.09 09:45
Оценка:
Здравствуйте, koandrew, Вы писали:


K>Гыы, 99,(9)% в куках каких-нить дело

Вообщем, Вы правы оказались. Дело в куках и автоматическом редиректе.
Msxml.XmlHttp автоматически их включает, а HttpWebRequest требует явных приседаний.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.