JSON
をURL(POST
およびGET
)に送信したい。
NSMutableDictionary *JSONDict = [[NSMutableDictionary alloc] init];
[JSONDict setValue:"myValue" forKey:"myKey"];
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:nil];
現在のリクエストコードが機能していません。
NSMutableURLRequest *requestData = [[NSMutableURLRequest alloc] init];
[requestData setURL:[NSURL URLWithString:@"http://fake.url/"];];
[requestData setHTTPMethod:@"POST"];
[requestData setValue:postLength forHTTPHeaderField:@"Content-Length"];
[requestData setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestData setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[requestData setHTTPBody:postData];
ASIHTTPRequest
の使用は、notの責任ある回答です。
IOSでPOST
およびGET
リクエストを送信するのは非常に簡単です。追加のフレームワークは必要ありません。
POST
リクエスト:まず、POST
のbody
(送信したいもの)をNSString
として作成し、それをNSData
に変換します。
_NSString *post = [NSString stringWithFormat:@"test=Message&this=isNotReal"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
_
次に、postData
のlength
を読み取るので、リクエストでそれを渡すことができます。
_NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
_
投稿したいものがあるので、NSMutableURLRequest
を作成し、postData
を含めることができます。
_NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://YourURL.com/FakeURL"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
_
_let post = "test=Message&this=isNotReal"
let postData = post.data(using: String.Encoding.ascii, allowLossyConversion: true)
let postLength = String(postData!.count)
var request = URLRequest(url: URL(string: "http://YourURL.com/FakeURL/PARAMETERS")!)
request.httpMethod = "POST"
request.addValue(postLength, forHTTPHeaderField: "Content-Length")
request.httpBody = postData;
_
最後に、リクエストを送信し、新しいNSURLSession
を作成して返信を読むことができます。
_NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Request reply: %@", requestReply);
}] resume];
_
_let session = URLSession(configuration: .default)
session.dataTask(with: request) {data, response, error in
let requestReply = NSString(data: data!, encoding: String.Encoding.ascii.rawValue)
print("Request reply: \(requestReply!)")
}.resume()
_
GET
リクエスト:GET
リクエストでは、基本的に同じもので、なしHTTPBody
と_Content-Length
_のみです。
_NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://YourURL.com/FakeURL/PARAMETERS"]];
[request setHTTPMethod:@"GET"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Request reply: %@", requestReply);
}] resume];
_
_var request = URLRequest(url: URL(string: "http://YourURL.com/FakeURL/PARAMETERS")!)
request.httpMethod = "GET"
let session = URLSession(configuration: .default)
session.dataTask(with: request) {data, response, error in
let requestReply = NSString(data: data!, encoding: String.Encoding.ascii.rawValue)
print("Request reply: \(requestReply!)")
}.resume()
_
補足として、次をNSMutableURLRequest
に追加することで_Content-Type
_(およびその他のデータ)を追加できます。これは、リクエスト時にサーバーが必要とする場合があります(例: json )。
_[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
_
応答コードは、[(NSHTTPURLResponse*)response statusCode]
を使用して読み取ることもできます。
_request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
_
更新:sendSynchronousRequest
はdeprecatedfrom ios9 および osx-elcapitan (10.11)およびout。
_NSURLResponse *requestResponse; NSData *requestHandler = [NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:nil]; NSString *requestReply = [[NSString alloc] initWithBytes:[requestHandler bytes] length:[requestHandler length] encoding:NSASCIIStringEncoding]; NSLog(@"requestReply: %@", requestReply);
_
RestKit を使用することで、簡単なPOST=リクエストを作成できます(詳細は GitHub ページを参照)。
ヘッダーファイルで RestKit をインポートします。
#import <RestKit/RestKit.h>
次に、新しいRKRequest
を作成することから始めます。
RKRequest *MyRequest = [[RKRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://myurl.com/FakeUrl/"]];
次に、どのような種類のリクエストを作成するかを指定します(この場合、POST
リクエスト)。
MyRequest.method = RKRequestMethodPOST;
MyRequest.HTTPBodyString = YourPostString;
そして、additionalHTTPHeaders
でリクエストをJSONとして設定します。
MyRequest.additionalHTTPHeaders = [[NSDictionary alloc] initWithObjectsAndKeys:@"application/json", @"Content-Type", @"application/json", @"Accept", nil];
最後に、リクエストを送信できます。
[MyRequest send];
さらに、リクエストをNSLog
して結果を確認できます。
RKResponse *Response = [MyRequest sendSynchronously];
NSLog(@"%@", Response.bodyAsString);
ソース: RestKit.org および Me 。
-(void)postmethod
{
NSString * post =[NSString stringWithFormat:@"Email=%@&Password=%@",_txt_uname.text,_txt_pwd.text];
NSData *postdata= [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength=[NSString stringWithFormat:@"%lu",(unsigned long)[postdata length]];
NSMutableURLRequest *request= [[NSMutableURLRequest alloc]init];
NSLog(@"%@",app.mainurl);
// NSString *str=[NSString stringWithFormat:@"%@Auth/Login",app.mainurl];
NSString *str=YOUR URL;
[request setURL:[NSURL URLWithString:str]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postdata];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *returnstring=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSMutableDictionary *dict=[returnstring JSONValue];
NSLog(@"%@",dict);
}
-(void)GETMethod
{
NSString *appurl;
NSString *temp =@"YOUR URL";
appurl = [NSString stringWithFormat:@"%@uid=%@&cid=%ld",temp,user_id,(long)clubeid];
appurl = [appurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:appurl]];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSMutableDictionary *dict_eventalldata=[returnString JSONValue];
NSString *success=[dict_eventalldata objectForKey:@"success"];
}