Как отправить запрос POST и GET?
Я хочу отправить свой 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 ответственным ответом.
Ответы
Ответ 1
Отправка POST
и GET
запросов в iOS довольно проста; и нет необходимости в дополнительной структуре.
POST
Запрос:
Начнем с создания POST
body
(эрго, что мы хотим отправить) как NSString
и преобразования его в NSData
.
objective-c
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];
swift
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
:
objective-c
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];
swift
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
.
objective-c
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];
swift
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()
На боковой ноте вы можете добавить Content-Type
(и другие данные), добавив следующее к нашему NSMutableURLRequest
. Это может потребоваться сервером при запросе, например json.
objective-c
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
Код ответа также можно прочитать с помощью [(NSHTTPURLResponse*)response statusCode]
.
swift
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
Обновление: sendSynchronousRequest
устарело от 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);
Ответ 2
Используя 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;
И затем установите свой запрос как JSON в additionalHTTPHeaders
.
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.
Ответ 3
-(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 [email protected]"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"];
}
Ответ 4
- (недействительными) fetchData {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:[NSURL
URLWithString:@"yourURL"]];
NSLog(@"LatestURL:%@",data);
NSError* error=nil;
NSDictionary *jsonDict= [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions error:&error];
NSLog(@"JSON = %@", [[NSString alloc] initWithData:data encoding:
NSUTF8StringEncoding]);
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *statuses=[jsonDict objectForKey:@"result"];
NSLog(@"SomeStatus :%@",statuses);
if (!statuses)
{
NSLog(@"Error in Json :%@",error);
}
else
{
[self.arrayTimeline removeAllObjects];
for(NSDictionary *newValu in statuses)
{
[self.arrayTimeline addObject:newValu];
NSString *ProjectName=[newValu objectForKey:@"project_name"];
NSLog(@"Project Name : %@",ProjectName);
NSString *Stage=[newValu objectForKey:@"stage_name"];
NSLog(@"Stage : %@",Stage);
NSString *CompTime=[newValu objectForKey:@"completion_time"];
NSLog(@"Completion Time : %@",CompTime);
NSString *Status=[newValu objectForKey:@"status"];
NSLog(@"Status : %@",Status);
}
[self.projectTimelineTable reloadData];
});
} }); }
JSON Response from url:
{ "status": "success", "name": "project1", "address": "badkal mor metro station", "state": "haryana", "city": "faridabad", "start_time": "1480586013", "current_stage": "Прием заявок", "Менеджер": "Недоступно", "Срок завершения": "1480464000" }
вы можете получить значение ключа, например name, start_time и т.д. и показать на этикетке
Ответ 5
просмотреть control.h
@interface ViewController UIViewController<UITableViewDataSource,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic)NSArray *array;
@property NSInteger select;
@end
view.m
- (void)viewDidLoad {
[super viewDidLoad];
NSString *urlString = [NSString stringWithFormat: @"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=11.021459,76.916332&radius=2000&types=atm&sensor=false&key=AIzaS yD7c1IID7zDCdcfpC69fC7CUqLjz50mcls"];
NSURL *url = [NSURL URLWithString: urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:
data options: 0 error: nil];
_array = [[NSMutableArray alloc]init];
_array = [[jsonData objectForKey:@"results"] mutableCopy];
[_tableView reloadData];}
// Do any additional setup after loading the view, typically from a
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return _array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellid = @"cell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:cellid];
cell = [[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:cellid];
cell.textLabel.text = [[_array
valueForKeyPath:@"name"]objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [[_array
valueForKeyPath:@"vicinity"]objectAtIndex:indexPath.row];
NSURL *imgUrl = [NSURL URLWithString:[[_array
valueForKey:@"icon"]objectAtIndex:indexPath.row]];
NSData *imgData = [NSData dataWithContentsOfURL:imgUrl];
cell.imageView.layer.cornerRadius =
cell.imageView.frame.size.width/2;
cell.imageView.layer.masksToBounds = YES;
cell.imageView.image = [UIImage imageWithData:imgData];
return cell;
}
@end
tablecell.h
@interface TableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@property (weak, nonatomic) IBOutlet UILabel *lblName;
@property (weak, nonatomic) IBOutlet UILabel *lblAddress;