POSTing неизменной полезной нагрузки - PullRequest
2 голосов
/ 04 марта 2011

Я смоделировал форму, которую планирую использовать для публикации произвольных значений в произвольных URL-адресах.Я использую это главным образом для тестирования веб-сервисов, которые я разрабатываю через браузер.На странице есть <input>s для формы method и action и множество пар элементов управления input="text" для установки публикуемых пар имя / значение.

Это прекрасно работает для моих служб, которым требуется настройка по умолчаниюкодировка строки запроса, например:

POST http://mysite.com/MyService.svc/CheckUsername HTTP/1.1
User-Agent: Fiddler
Host: mysite.com
Content-Length: 15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

userName=Tester

Однако для некоторых веб-сервисов, очевидно, требуются данные в других форматах.В частности, служба, которую я пытаюсь разместить, принимает XML:

POST http://mysite.com/MyService.svc/checkusername HTTP/1.1
User-Agent: Fiddler
Host: mysite.com
Content-Length: 60
Content-type: text/xml
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

<CheckUsername> <username>tester</username> </CheckUsername>

Как получить полный контроль над полезной нагрузкой формы POST, чтобы я мог правильно структурировать полезную нагрузку?В идеале решением будет только HTML, но я также интенсивно использую jQuery на странице, поэтому это тоже вариант.Я знаю, что могу полностью манипулировать данными, используя $.ajax(), но если я не ошибаюсь, это не вариант из-за той же политики происхождения - я хочу, чтобы эта форма могла публиковаться на любом из моих сайтов без необходимости загружать ее ввеб-сервер.

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Я думаю, что единственным вариантом здесь является прокси-скрипт на вашем сервере, который будет делать POST-запросы, используя cURL. (См. передача значений $ _POST с помощью cURL для примера PHP). Вместо публикации в веб-сервисе вы должны публиковать в сценарии на своем собственном сервере, а затем этот сценарий будет публиковать в веб-службе.

Если не для междоменных запросов, запросы POST с произвольным телом могут быть легко выполнены:

$.post(
  'http://example.com',
  '<CheckUsername><username>tester</username></CheckUsername>')

Вы также можете использовать Flash, CORS или iframe для решения ваших междоменных проблем, но для этого потребуется сотрудничество с веб-службой, например, файлом crossdomain.xml или заголовком Access-Control-Allow-Origin, который, я полагаю, не вариант.

1 голос
/ 07 марта 2011

Современные браузеры могут использовать междоменный домен AJAX ( CORS ; jQuery поддерживает это "из коробки"), но сервер должен разрешить это, используя специальные заголовки в своем ответе.Кроме этого, я не думаю, что вы можете публиковать что-то, что не закодировано и не содержит хотя бы один знак =.

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