HTTP POST - я застрял
Вопрос
Я должен опубликовать некоторые параметры в URL-адресе за пределами моей сети, и разработчики с другой стороны попросили меня не использовать HTTP-параметры:вместо этого я должен опубликовать свои ключевые значения в HTTP - Заголовки.
Дело в том, что я на самом деле не понимаю, что они означают:Я попытался использовать сообщение, подобное ajax, с объектами XmlHttp, а также я попытался написать в заголовке что-то вроде
Request.Headers.Add(key,value);
но я не могу (исключение из фреймворка);Я попробовал наоборот, используя объект Response, например
Response.AppendHeader("key", "value");
а затем перенаправьте на нужную страницу...но и это тоже не работает.
По-моему, очевидно, что я там застрял, есть какая-нибудь помощь?
Редактировать Я забыл сказать вам, что моей средой является .Net 2.0, c #, на Win server 2003.Исключение, которое я получил, это
System.PlatformNotSupportedException was unhandled by user code
Message="Operation is not supported on this platform."
Source="System.Web"
Похоже, это вызвано моим предварительным запросом to.Добавлю, MS год назад опубликовала несколько исправлений безопасности, которые этого не позволяют.
Решение
Как сказал @lassevk, перенаправление не будет работать.
Вы должны использовать класс WebRequest для выполнения HTTP POST со своей страницы или приложения. здесь есть пример .
Другие советы
Вы пробовали класс WebClient? Пример может выглядеть так:
WebClient client = new WebClient();
NameValueCollection data = new NameValueCollection();
data["var1"] = "var1";
client.UploadValues("http://somewhere.com/api", "POST", data);
Взгляните на HttpWebRequest. Вы должны иметь возможность создать запрос к URL-адресу, о котором идет речь, используя HttpWebRequest.Method = & Quot; POST & Quot;.
Вы должны опубликовать больше информации.
Например, это C #? Похоже, но я могу ошибаться.
Кроме того, вы говорите, что получаете исключение, каков тип исключения и сообщение?
В любом случае вы не можете перенаправить на страницу для POST, вам нужно отправить ее из браузера, а не из сервера перенаправления, поэтому, если вы хотите автоматизировать это, я думаю, вам нужно сгенерировать HTML-страница с тегом формы, с некоторыми скрытыми полями ввода, а затем отправьте его с помощью JavaScript.
Я думаю, они имеют в виду, что они не хотят, чтобы вы использовали параметры URL (GET). Если вы используете заголовки http, на самом деле это больше не запросы через POST.
Какой язык / рамки?
Используя Python и httplib2, вы сможете сделать что-то вроде:
http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))
Я считаю, что объект Request будет принимать только определенный набор предопределенных заголовков.
Существует перечисление, в котором также перечислены все поддерживаемые заголовки HTTP.
Но я не могу вспомнить это сейчас ... Я посмотрю это через секунду ...
Я протестировал ваш сценарий, используя 2 примера страниц, используя опцию XMLHttpRequest.Пользовательские заголовки доступны на странице aspx, размещенной на, используя XMLHttpRequest.
Создайте следующие 2 страницы.Убедитесь, что страница aspx находится в решении, чтобы вы могли запустить ее в отладчике, установить точку останова и проверить запрос.Коллекция заголовков.
<html>
<head>
< script language="javascript">
function SendRequest()
{
var r = new XMLHttpRequest();
r.open('get', 'http://localhost/TestSite/CheckHeader.aspx');
r.setRequestHeader('X-Test', 'one');
r.setRequestHeader('X-Test', 'two');
r.send(null);
}
< script / >
</head> <body> <form> <input type="button" value="Click Me" OnClick="SendRequest();" /> </form> </body> </html>
CheckHeader.aspx
использование Системы;
использование системы.Веб;
использование System.Web.UI;
открытый частичный класс CheckHeader :System.Web.UI.Страница
{
protected void Page_Load(object sender, EventArgs e)
{
string value = string.Empty;
foreach (string key in Request.Headers)
value = Request.Headers[key].ToString();
}
}
Человек..Этот html-редактор - отстой..или я не знаю, как им пользоваться...
Исключение, с которым я столкнулся вчера, было вызвано моей глупой попыткой записи в заголовки уже созданной страницы.
Когда я начал создавать свой запрос, следуя одному из указанных здесь способов, я мог написать свои заголовки. Р>
Теперь я использую объект WebRequest, как в примере, указанном @sectrean, .
Большое спасибо всем. StackOverflow порождает: -)