2012-09-30 4 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

해결 됐습니다. –

답변

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

나는 "action"양식 매개 변수 (예제에서와 같이), "email"과 "password"의 입력이있는 웹 코드 조각을 가져 와서 "action"URL에 내 URL을 설정 한 다음 위의 내용을 사용했습니다 이메일/비밀번호 값 (UUEncoded)을 추가하고 Wham을 처음으로 사용했습니다! 투표를 두 번 줄 수 있으면 좋겠어! –

+0

다른 필드가 객체 인 경우는 어떻습니까? 즉 NSString * postString = @ "paperid = 6 & q77 = 2 & q80 = blah & obj = ?????"; - 어떻게 이걸 처리 했니? –

5

당신은 당신이 당신의 POST 요청 데이터는 다음과 같습니다 것을 볼 것입니다 (브라우저에서 디버그 패널을 사용하여)이 양식을 사용하는 경우 브라우저가 서버에 제출 무엇인지 살펴 걸릴 경우

paperid=6&q77=2&q80=blah 

을 선택한 라디오 버튼의 값 항목이 해당 POST 항목의 값으로 사용되며 모든 라디오 버튼에 대해 하나의 항목 만 표시됩니다. (현재 선택된 각각에 대한 값을 얻을 수있는 토글 버튼과 반대입니다.)

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 ) 매개 변수 이름없이 객체를 전송하는 방법 ? –