如何为 GET 方法发送 HTTP body 纯文本?
How to send HTTP body plain text for GET method?
我遇到了问题,我使用 iGDB REST API,它需要为某些具有 GET 的端点发送一些 纯文本 方法。
PostMan 没有问题(通过选择 "Body" > "raw" 并粘贴我的查询),但是当我尝试使用 Objective-C, 出现错误告诉我“GET 方法不能有 body”...
这是我的应用程序中使用的代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]];
[request addValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"GET"];
[request setHTTPBody:[@"sort popularity desc;" dataUsingEncoding:NSUTF8StringEncoding]];
编辑 2019 年 2 月 10 日
尝试在 headers 中添加每个过滤器都不起作用...
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]];
[request setValue:[[@"id,name,first_release_date,release_dates,cover,platforms" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"fields"];
[request setValue:[[@"popularity desc" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"sort"];
[request setValue:[[@"5" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"limit"];
[request setValue:[[@"0" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"offset"];
提前感谢您的任何回复!
如果我回答你的问题,你可以为你的请求设置参数header你可以像下面这样设置。
[request addValue:@"valueForKey1" forHTTPHeaderField:@"key1"];
[request addValue:@"valueForKey2" forHTTPHeaderField:@"key2"];
如果你发送这样的数据格式,
NSString *stringValueOfParameters =[NSString stringWithFormat:@"userName:blabla"];
NSData *convertedDat=[stringValueOfParameters dataUsingEncoding:NSUTF8StringEncoding];
NSString *headerValue=[NSString stringWithFormat:@"Basic %@",[convertedDat base64EncodedStringWithOptions:0]];
[request setValue:headerValue forHTTPHeaderField:@"headerKey"];
// 编辑
你一定要试一下,直接写一个Dictionary
或者像下面那样把你的JSON
参数写成NSString
然后转换成Data
.
NSDictionary *dictParams = @{ @"fields" : @[@"id",@"name",@"first_release_date",@"release_dates",@"cover",@"platforms"], @"sort" : @"popularity desc", @"limit": @5, @"offset":@0 };
//这个取自例子
NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
然后尝试设置header。
根据 iOS 13 release notes,GET 请求不再允许有正文:
All URLSessionTask instances with a GET HTTP method that contain a body now produce the error NSURLErrorDataLengthExceedsMaximum. (46025234)
这使得 URLSession
更符合 HTTP/1.1 RFC:
A message-body MUST NOT be included in
a request if the specification of the request method (section 5.1.1)
does not allow sending an entity-body in requests.
我遇到了问题,我使用 iGDB REST API,它需要为某些具有 GET 的端点发送一些 纯文本 方法。
PostMan 没有问题(通过选择 "Body" > "raw" 并粘贴我的查询),但是当我尝试使用 Objective-C, 出现错误告诉我“GET 方法不能有 body”...
这是我的应用程序中使用的代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]];
[request addValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"GET"];
[request setHTTPBody:[@"sort popularity desc;" dataUsingEncoding:NSUTF8StringEncoding]];
编辑 2019 年 2 月 10 日
尝试在 headers 中添加每个过滤器都不起作用...
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]];
[request setValue:[[@"id,name,first_release_date,release_dates,cover,platforms" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"fields"];
[request setValue:[[@"popularity desc" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"sort"];
[request setValue:[[@"5" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"limit"];
[request setValue:[[@"0" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] forHTTPHeaderField:@"offset"];
提前感谢您的任何回复!
如果我回答你的问题,你可以为你的请求设置参数header你可以像下面这样设置。
[request addValue:@"valueForKey1" forHTTPHeaderField:@"key1"];
[request addValue:@"valueForKey2" forHTTPHeaderField:@"key2"];
如果你发送这样的数据格式,
NSString *stringValueOfParameters =[NSString stringWithFormat:@"userName:blabla"];
NSData *convertedDat=[stringValueOfParameters dataUsingEncoding:NSUTF8StringEncoding];
NSString *headerValue=[NSString stringWithFormat:@"Basic %@",[convertedDat base64EncodedStringWithOptions:0]];
[request setValue:headerValue forHTTPHeaderField:@"headerKey"];
// 编辑
你一定要试一下,直接写一个Dictionary
或者像下面那样把你的JSON
参数写成NSString
然后转换成Data
.
NSDictionary *dictParams = @{ @"fields" : @[@"id",@"name",@"first_release_date",@"release_dates",@"cover",@"platforms"], @"sort" : @"popularity desc", @"limit": @5, @"offset":@0 };
//这个取自例子
NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
然后尝试设置header。
根据 iOS 13 release notes,GET 请求不再允许有正文:
All URLSessionTask instances with a GET HTTP method that contain a body now produce the error NSURLErrorDataLengthExceedsMaximum. (46025234)
这使得 URLSession
更符合 HTTP/1.1 RFC:
A message-body MUST NOT be included in a request if the specification of the request method (section 5.1.1) does not allow sending an entity-body in requests.