2011-03-03 4 views
2

任意のURLに任意の値を投稿するために使用する予定のフォームを嘲笑しました。私はこれを主に私がブラウザを介して開発しているWebサービスをテストするために使用しています。ページはmethodactionのフォームに<input>s、投稿される名前と値のペアを設定する多くのペアの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

ここで唯一のオプションは、cURLを使用してPOSTリクエストを行うサーバー上のプロキシスクリプトです。 (PHPの例については、passing $_POST values with cURLを参照してください)。 Webサービスにポストするのではなく、自分のサーバーのスクリプトにポストすると、そのスクリプトがWebサービスにポストされます。

ないクロスドメインリクエストのために、任意のボディを持つPOSTリクエストを容易に行うことができる場合は、次の

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

あなたはまた、あなたのクロスドメインの問題を解決するには、Flash、CORSまたはインラインフレームを使用することができ、これらは必要になりますつまり、crossdomain.xmlファイルまたはAccess-Control-Allow-Originヘッダーです(これはオプションではありません)。

+0

私は聞いてみたいですが、感謝しています。 – Jeff

1

現代のブラウザでは、AJAXクロスドメイン(CORS; jQueryはこれをそのまま使用できます)を使用できますが、サーバーは返信に特別なヘッダーを使用して許可する必要があります。それ以外に、私はあなたがurlencodeされていないものを投稿でき、少なくとも1つの=記号を含んでいないとは思わない。

+0

これは価値があるよりも難しいようです。答えに感謝します。 – Jeff

関連する問題