HttpWebRequest — скобки не разрешены в POST

#.net #http #httpwebrequest

#.net #http #httpwebrequest

Вопрос:

РЕДАКТИРОВАТЬ: я использовал скопированный код из другого проекта, который был чрезмерно сложным… К счастью, выходные не за горами.

***********************************************

В настоящее время я создаю внешний API шлюза SMS для внутреннего использования — внешний API требует, чтобы сообщение нескольким получателям использовало следующий синтаксис:

http://(smsgateway)/?username=fooamp;pass=baramp;from=myNameamp;recipient[]=4512345678amp;recipient[]=4587654321amp;…

Это отлично работает для запросов GET, но я бы предпочел отправлять сообщения на шлюз, чтобы избежать проблем с генерируемыми очень большими URL. хотя HTTP 1.1 явно не запрещает клиентам отправлять запросы с очень длинными URL-адресами на сервер.

Проблема здесь в том, что мне не разрешено использовать имя параметра формы, содержащее скобки, если я использую HttpWebRequest в .NET 4. Я получаю следующую ошибку: ‘Указанное значение содержит недопустимые символы заголовка HTTP’

Мой вопрос: я не смог найти ничего в спецификации HTTP 1.1 относительно недопустимых символов в именах параметров формы, так почему мне не разрешено использовать имя параметра формы с именем ‘recipients []’?

Ответ №1:

Как вы отправляете POST-запрос? HTTP не заботится о POST «параметрах формы», потому что они отправляются в теле запроса (с соответствующей кодировкой содержимого).

Комментарии:

1. Ошибка возникает при добавлении в коллекцию форм: WebRequest. Headers.Add(«получатели[]», «некоторое значение»);

2. Запросы POST работают не так — параметры формы не отправляются в заголовках запроса. Они отправляются в теле запроса.

3. Вот что обнаружил быстрый поиск в Google, обратите внимание, как отправляются postData: netomatix.com/httppostdata.aspx

4. Я использовал код из другого проекта, но после небольшого реинжиниринга, вдохновленного вашим примером, все работает как по маслу. Хороший вопрос — спасибо