HTTP POST - я застрял - PullRequest
       53

HTTP POST - я застрял

5 голосов
/ 03 сентября 2008

Мне нужно ПОСТАВИТЬ некоторые параметры в 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"

Похоже, это вызвано моим предварительным запросом Request.Add, MS год назад опубликовал некоторые исправления безопасности, которые не позволяют этого.

Ответы [ 9 ]

3 голосов
/ 03 сентября 2008

Вы пробовали класс WebClient? Пример может выглядеть так:

        WebClient client = new WebClient();
        NameValueCollection data = new NameValueCollection();
        data["var1"] = "var1";
        client.UploadValues("http://somewhere.com/api", "POST", data);
1 голос
/ 03 сентября 2008

Как сказал @lassevk, перенаправление не будет работать.

Вы должны использовать класс WebRequest для выполнения HTTP POST со своей страницы или приложения. Вот пример здесь .

1 голос
/ 03 сентября 2008

Посмотрите на HttpWebRequest. Вы должны быть в состоянии создать запрос к URL-адресу, о котором идет речь, используя HttpWebRequest.Method = "POST".

0 голосов
/ 03 сентября 2008

Исключение, с которым я столкнулся вчера, было вызвано моей глупой попыткой записи в заголовки уже созданной страницы.

Когда я начал создавать свой Запрос, следуя одному из указанных здесь способов, я мог написать свои заголовки.

Теперь я использую объект WebRequest, как в примере, указанном @sectrean, здесь .

Большое спасибо всем. StackOverflow пород: -)

0 голосов
/ 03 сентября 2008

Я протестировал ваш сценарий, используя 2 образца страницы, используя опцию XmlHttpRequest. Пользовательские заголовки доступны на странице aspx, размещенной на них, используя XmlHttpRequest.

Создайте следующие 2 страницы. Убедитесь, что страница aspx находится в решении, чтобы вы могли запустить ее в отладчике, установить точку останова и проверить коллекцию Request.Header.

< 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 / >


CheckHeader.aspx

с использованием системы;

с использованием System.Web;

с использованием System.Web.UI;

открытый частичный класс CheckHeader: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)
{
    string value = string.Empty;
    foreach (string key in Request.Headers)
        value = Request.Headers[key].ToString();
}

}

Человек .. Этот редактор HTML - отстой .. или я не знаю, как его использовать ...

0 голосов
/ 03 сентября 2008

Я считаю, что объект Request будет принимать только определенный набор предопределенных заголовков.

Существует перечисление, в котором перечислены также все поддерживаемые заголовки HTTP.

Но я не могу вспомнить это сейчас ... Я посмотрю это через секунду ...

0 голосов
/ 03 сентября 2008

Какой язык / рамки?

Используя Python и httplib2, вы сможете сделать что-то вроде:

http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))
0 голосов
/ 03 сентября 2008

Я думаю, они имеют в виду, что они не хотят, чтобы вы использовали параметры URL (GET). Если вы используете заголовки http, на самом деле это больше не запросы через POST.

0 голосов
/ 03 сентября 2008

Вы должны опубликовать больше информации.

Например, это C #? Похоже, но я могу ошибаться.

Кроме того, вы говорите, что получаете исключение, каков тип исключения и сообщение?

В любом случае вы не можете перенаправить на страницу для POST, вам нужно отправить ее из браузера, а не из сервера перенаправления, поэтому, если вы хотите автоматизировать это, я думаю, вам нужно сгенерировать HTML-страница с тегом формы, с некоторыми скрытыми полями ввода, а затем отправьте его с помощью JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...