发布未改变的有效负载

时间:2011-03-03 22:48:01

标签: jquery html forms

我已经模拟了一个我打算用来将任意值发布到任意URL的表单。我主要用它来测试我通过浏览器开发的Web服务。该页面包含<input>s表单methodaction以及多对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

但是,某些Web服务显然需要其他格式的数据。具体来说,我试图容纳的服务是接受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 个答案:

答案 0 :(得分:2)

我认为这里唯一的选择是服务器上的代理脚本,它将使用cURL发出POST请求。 (有关PHP示例,请参阅passing $_POST values with cURL)。您可以在自己的服务器上发布脚本,而不是发布到Web服务,然后该脚本将发布到Web服务。

如果不是跨域请求,可以轻松地使用任意正文的POST请求:

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

您也可以使用Flash,CORS或iframe来解决您的跨域问题,但这些需要来自Web服务的合作,即crossdomain.xml文件或Access-Control-Allow-Origin标头,我猜,不是一种选择。

答案 1 :(得分:1)

现代浏览器可以使用AJAX跨域(CORS; jQuery支持开箱即用)但服务器必须在其回复中使用特殊标头来允许它。除此之外,我认为你不能发布不是urlencoded并且不包含至少一个=符号的东西。