2012-09-30 6 views
9

私はAFNetworkingフレームワークを使用しており、フォーム(POST)リクエストをサーバーに送信する必要があります。私はちょうどポストSending more than one image with AFNetworkingで議論されたものと同じように、AFHTTPClientでmultipartFormRequestWithMethodを使用することを検討してiOSでHTTPフォーム(POST)を送信する方法

<form id="form1" method="post" action="http://www.whereq.com:8079/answer.m"> 
    <input type="hidden" name="paperid" value="6"> 
    <input type="radio" name="q77" value="1"> 
    <input type="radio" name="q77" value="2"> 
    <input type="text" name="q80"> 
</form> 

:ここでは、サーバが期待するもののサンプルです。しかし、フォームデータに「ラジオ」タイプの入力値を追加する方法についてはわかりません。

+0

で行う方法であるサーバが通ってくるしなかっ期待するもののあなたの例のように見えます。あなたがAFNetworkingにフックされていない場合、また、私はNSURLConnectionでこれを行う方法の例を提供することができます... –

+0

こんにちはobuseme、例を提供してください。 NSURLConnectionとNSMutableRequestを使用しても問題ありません。 –

+0

解決済みですが、POSTリクエストパラメータをいくつか追加しても構いません。 –

答えて

22

は、POSTパラメータを送信するためにNSURLConnectionを使った例です:

// Note that the URL is the "action" URL parameter from the form. 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.whereq.com:8079/answer.m"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
//this is hard coded based on your suggested values, obviously you'd probably need to make this more dynamic based on your application's specific data to send 
NSString *postString = @"paperid=6&q77=2&q80=blah"; 
NSData *data = [postString dataUsingEncoding:NSUTF8StringEncoding]; 
[request setHTTPBody:data]; 
[request setValue:[NSString stringWithFormat:@"%u", [data length]] forHTTPHeaderField:@"Content-Length"]; 
[NSURLConnection connectionWithRequest:request delegate:self]; 
ここ
+0

"アクション"フォームパラメータ(例のように)、 "電子メール"と "パスワード"の入力、アクションURLへのURLの設定、上記の使用電子メール/パスワードの値(UUEncoded)を追加するには、とwham、それは初めて働いた!私はあなたに投票を二倍にすることを願っています! –

+0

他のフィールドがオブジェクトの場合はどうですか?すなわちNSString * postString = @ "paperid = 6&q77 = 2&q80 = blah&obj = ?????"; - どうやってこれをやったの? –

5

あなたは(ブラウザでデバッグパネルを使用して)このフォームを使用した場合、ブラウザがサーバに送信する何を見ている場合、あなたのPOSTリクエストデータがこのようになっていることを参照してくださいね。

paperid=6&q77=2&q80=blah 

つまり、選択したラジオボタンからの値エントリが対応するPOSTエントリの値として使用され、ラジオボタンのすべてに対して1つのエントリだけが取得されます。

POST文字列の形式を理解したら、通常の方法でASIFormDataRequestを使用して要求を作成できるはずです。ここで

2

STHTTPRequest

STHTTPRequest *r = [STHTTPRequest requestWithURLString:@"http://www.whereq.com:8079/answer.m"]; 

r.POSTDictionary = @{ @"paperid":@"6", @"q77":"1", @"q80":@"hello" }; 

r.completionBlock = ^(NSDictionary *headers, NSString *body) { 
    // ... 
}; 

r.errorBlock = ^(NSError *error) { 
    // ... 
}; 

[r startAsynchronous]; 
+0

postBodyを使用していないため、サーバー側に配列を取得していないので、それは良くありません。 アレイ( [Q80] =>こんにちは [paperid] => 6 [Q77] => 1 ) 方法PARAM名なしでオブジェクトを送信しますか? –

関連する問題