2011-03-03 73 views
2

我嘲笑了一個我打算使用任意值發佈到任意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 

然而,一些網絡服務顯然需要其他格式的數據。具體來說,我正在嘗試適應是服務接受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

我認爲這裏唯一的選擇是在您的服務器上使用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標題,我猜這不是一個選項。

+0

不是我想聽到的答案,但是謝謝:) – Jeff

1

現代瀏覽器可以使用AJAX跨域(CORS; jQuery支持這個開箱即用),但服務器必須允許在其回覆中使用特殊標頭。除此之外,我不認爲你可以發佈一些不是urlencoded的東西,並且不包含至少一個=符號。

+0

這聽起來像是比它的價值更麻煩。謝謝你的答案。 – Jeff