2009-07-16 5 views
4

Я пытаюсь интегрироваться с API, для которого требуется заголовок «Дата» в веб-запросе. Как вы, возможно, знаете, .NET удалил возможность добавить или даже отобразить заголовок даты по умолчанию в вашем запросе, поэтому мне было интересно об обходном пути.ASP.NET: httpwebrequest date header обходной путь

Вот улов: вы не можете использовать TCPClients, потому что у меня нет «разрешений» на моем сервере для такой вещи, как сокеты. Есть ли способ «обмануть» систему, чтобы подделать заголовок даты или обмануть ее при публикации заголовка «Дата»? Или я должен просто отказаться от этого API?

Благодаря ...

(PS, язык VB.NET, если вы, пожалуйста :))

+0

На TCPClient: вы подтвердили, что у вас нет доступа к этому конкретному API, разговаривая с портом 80? –

+0

Как установить порт? – Jason

+0

Я сейчас пытаюсь сделать то же самое. Я постоянно получаю сообщения об ошибках от Zeep, говоря: «Время сообщения отличается от времени сервера, или заголовок Date не был предоставлен». –

ответ

0

Согласно документации, система будет добавлять заголовок Date с текущей датой и временем. Вам нужно другое значение для заголовка?

Возможно, вы сможете добавить его с помощью request.Headers.AddWithoutValidate.

+0

эй снова john :) когда я вытаскиваю все заголовки запросов, дата не включена. Мне нужно отправить дату + 7 часов, чтобы соответствовать GMT. – Jason

+0

также, я не могу получить запрос request.Headers.AddWithoutValidate, потому что он защищен? – Jason

+0

Crap. Я думал, что у меня это было, чтобы не показывать мне защищенных членов. Сожалею. Но в Дате, вы уверены, что отправляет не то, что ваша цель не поймет? –

1

Это не самый быстрый код в мире, но он может работать на некоторое время:

Type type = request.Headers.GetType(); 
MethodInfo method = type.GetMethod("AddWithoutValidate", 
    BindingFlags.Instance | BindingFlags.NonPublic); 
method.Invoke(request.Headers, new [] { "Date", DateTime.Now.ToString() }) 

Просто быть в курсе, что с помощью отражения, чтобы получить доступ к закрытым или защищенным членам чрезвычайно хрупкий и может порвать с любым обновить до .NET, что MS делает ...

+0

Из моего исследования, похоже, это не поможет. Они даже не отправляют заголовок с текущей датой/временем, как задокументировано. –

+0

Кстати, я собираюсь снизить это. Не то чтобы это было очень плохо, но для будущих читателей было указано, что это не способствовало решению (поскольку HttpWebRequest не собирался отправлять заголовок независимо от того, установлен ли он или нет) –

+0

Не проблема ... – ConsultUtah

1

Я нашел ответ на проблему с датой, вам просто нужно получить доступ к запросу напрямую как HttpWebRequest. Это похоже на простой ответ, но он сработал.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri) ; 

request.Date = date; 
request.Method = "POST"; 
+0

Какая среда выполнения .NET поддерживает это? –