将 HTTP 标头添加到 NSURLRequest

Posted

技术标签:

【中文标题】将 HTTP 标头添加到 NSURLRequest【英文标题】:Add HTTP Header to NSURLRequest 【发布时间】:2010-11-24 09:18:07 【问题描述】:

有没有办法将 HTTP 标头添加到 NSURLRequest 对象?我曾经将它们添加到NSMutableURLRequest,使用:

[request addValue:@"PC" forHTTPHeaderField:@"machineName"]

【问题讨论】:

【参考方案1】:

我认为您不能修改 NSURLRequest 的 HTTP 标头。我认为您正在尝试修改未初始化的 NSURLRequest 对象?

您可以为您的请求创建一个mutableCopy,然后使用以下方法设置标头字段:

 -(void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field.

之后,您可以将 copy 可变请求返回到您的 NSURLRequest 变量。

编辑:在下面添加示例

/* Create request variable containing our immutable request
 * This could also be a paramter of your method */
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.***.com"]];

// Create a mutable copy of the immutable request and add more headers
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[mutableRequest addValue:@"Hless" forHTTPHeaderField:@"X-user-nick"];

// Now set our request variable with an (immutable) copy of the altered request
request = [mutableRequest copy];

// Log the output to make sure our new headers are there    
NSLog(@"%@", request.allHTTPHeaderFields);

【讨论】:

感谢您的回复,问题是您无法将 Http Headers 添加到 NSURLRequest 中,您只能获取它们,老实说,我想使用 NSURLRequest 因为我想使用委托“didReceiveData”,但现在我使用线程而不是 NSMutableURLRequest。 我知道我发布这个已经有一段时间了,但由于一些受欢迎的需求,我更新了正确性的答案并添加了一个示例。 嘿@Hless 我尝试了这种方法,但我仍然未经授权。你能在这里看到我的问题吗:***.com/questions/40342728/… 或者只是从一开始就创建一个 NSMutableRequest,因为您希望添加一个标头。 @AlexZavatone 根据问题和 OP 的评论,我猜他收到了来自另一个库的 NSURLRequest 左右。因此,在这种特殊情况下,他将无法从一开始就使用 NSMutableRequest。他还在他的问题中说他知道 NSMutableRequest 是如何工作的。【参考方案2】:

已经回答(感谢这些回答),但这里有一个更简单的例子:

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setValue:@"es" forHTTPHeaderField:@"Accept-Language"];

【讨论】:

如果您阅读了这个问题,实际上并非如此。 OP 声明他知道 NSMutableURLRequest 是如何工作的。如果您想修改未在自己的代码中初始化的现有 NSURLRequest(例如,从库中),则必须在我的答案中使用该方法,否则您将丢失原始请求中的标头等。跨度> 【参考方案3】:
NSString *urlString = @"http://10.28.79.63:3000/testing";

NSMutableURLRequest *imageRequest = [[NSMutableURLRequest alloc] init] ;
[imageRequest setURL:[NSURL URLWithString:urlString]];
[imageRequest setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];

[imageRequest setValue:contentType forHTTPHeaderField: @"content-Type"]; 
NSMutableData *body = [NSMutableData dataWithCapacity:[imageData length] + 512];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]]; 

//Here u adds the Headers which will be posted in body 

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; content-type: application/octet-stream; name=\"userfile\"; filename=\"inLove.mp4\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];


[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[imageRequest setHTTPBody:body];
NSURLConnection * theConnection = [[NSURLConnection alloc] initWithRequest:imageRequest 
                                                delegate:self];

【讨论】:

以上是关于将 HTTP 标头添加到 NSURLRequest的主要内容,如果未能解决你的问题,请参考以下文章

将标头添加到 http 请求

Guzzle HTTP - 将授权标头直接添加到请求中

将标头添加到(HTTP 请求)文件下载

如何将承载令牌添加到 HTTP 请求的标头?

如何将授权标头添加到 Angular http 请求?

将单个 HTTP 标头的多个值添加到请求或响应的标准