如何发送 POST 和 GET 请求? [英] How to send POST and GET request?
问题描述
我想将我的 JSON
发送到 URL(POST
和 GET
).
I want to send my JSON
to a URL (POST
and GET
).
NSMutableDictionary *JSONDict = [[NSMutableDictionary alloc] init];
[JSONDict setValue:"myValue" forKey:"myKey"];
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:nil];
<小时>
我当前的请求代码无效.
My current request code isn't working.
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
不是一个可靠的答案.
推荐答案
在 iOS 中发送 POST
和 GET
请求非常简单;并且不需要额外的框架.
Sending POST
and GET
requests in iOS is quite easy; and there's no need for an additional framework.
我们首先创建我们的 POST
的 body
(也就是我们想要发送的)作为 NSString
,然后转换将其转换为 NSData
.
We begin by creating our POST
's body
(ergo. what we'd like to send) as an NSString
, and converting it to NSData
.
NSString *post = [NSString stringWithFormat:@"test=Message&this=isNotReal"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
接下来,我们读取postData
的length
,以便我们可以在请求中传递它.
Next up, we read the postData
's length
, so we can pass it along in the request.
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
既然我们有了想要发布的内容,我们可以创建一个 NSMutableURLRequest
,并包含我们的 postData
.
Now that we have what we'd like to post, we can create an NSMutableURLRequest
, and include our 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
来读取回复:
And finally, we can send our request, and read the reply by creating a new 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
.
GET
Request:
With the GET
request it's basically the same thing, only without the HTTPBody
and 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.
On a side note, you can add Content-Type
(and other data) by adding the following to our NSMutableURLRequest
. This might be required by the server when requesting, e.g, a json.
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
也可以使用[(NSHTTPURLResponse*)response statusCode]
读取响应代码.
Response code can also be read using [(NSHTTPURLResponse*)response statusCode]
.
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
<小时>
更新: sendSynchronousRequest
从 弃用="显示问题标记为 'ios9'" rel="tag">ios9 和 osx-elcapitan (10.11) 并退出.
Update: sendSynchronousRequest
is deprecated from ios9 and osx-elcapitan (10.11) and 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);
这篇关于如何发送 POST 和 GET 请求?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!