2011-01-26 41 views
81

Tôi cần đặt tiêu đề HTTP cho một yêu cầu. Trong tài liệu cho lớp NSURLRequest, tôi không tìm thấy bất cứ điều gì liên quan đến tiêu đề HTTP. Làm cách nào để đặt tiêu đề HTTP chứa dữ liệu tùy chỉnh?NSURLYêu cầu đặt tiêu đề HTTP

Trả lời

169

Bạn cần phải sử dụng một NSMutableURLRequest

NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] 
           autorelease]; 

[request setValue:VALUE forHTTPHeaderField:@"Field You Want To Set"]; 

hoặc để thêm một tiêu đề:

[request addValue:VALUE forHTTPHeaderField:@"Field You Want To Set"]; 
+1

Chỉ là những gì tôi đang tìm kiếm !! Thumbs Up to you !! –

+1

Có API nào để thêm từ điển của tiêu đề không? –

+1

Câu trả lời tuyệt vời! Tôi muốn chỉ ra rằng [câu trả lời] của RamS (http://stackoverflow.com/a/20760445/1778488) có tài liệu hay. – fskirschbaum

6
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"your value" forHTTPHeaderField:@"for key"];//change this according to your need. 
[request setHTTPBody:postData]; 
+2

Có lẽ bạn nên thêm một số giải thích cho mã bạn đã đăng. – MasterAM

+0

setValue: @ "application/x-www-form-urlencoded" có nghĩa là, nó có phải là tùy chỉnh không? –

+0

Trong trường hợp hỗ trợ có giới hạn cho POST trong phần mềm máy khách HTTP, nơi dữ liệu thuần túy không thể được gửi trong nội dung thư HTTP, RESTfm có thể xử lý dữ liệu được mã hóa trong cả ứng dụng/x-www-form-urlencoded hoặc multipart/form-data định dạng. Lưu ý: Định dạng ứng dụng/x-www-form-urlencoded và multipart/form-data chỉ áp dụng cho phương thức HTTP POST Lưu ý 2: Định dạng này sử dụng cùng một lược đồ 'mã hóa URL' theo yêu cầu cho chuỗi truy vấn GET các thông số như được mô tả ở đây. Ưu điểm Hỗ trợ kích thước dữ liệu lớn hơn so với những gì có thể bằng chuỗi truy vấn GET. –

0

Bạn có thể thêm giá trị trong NSMutableURLRequest cho HeaderField:

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url]; 

[request setValue:VALUE forHTTPHeaderField:@"cookie"]; 

Điều này đang làm việc cho tôi.

10

cho Swift

let url: NSURL = NSURL(string: APIBaseURL + "&login=1951&pass=1234")! 
var params = ["login":"1951", "pass":"1234"] 
request = NSMutableURLRequest(URL:url) 
request.HTTPMethod = "POST" 
var err: NSError? 
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err) 
request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
request.addValue("application/json", forHTTPHeaderField: "Accept") 
+0

Tôi đang sử dụng loại tương tự để tạo yêu cầu, nhưng nó trả về dữ liệu ** nil **. Tôi đã cố gắng để những gì sai và điều duy nhất tôi có thể đi lên là giá trị phản ứng trở lại có giá trị khác nhau cho "Content-Type" trái ngược với những gì tôi đang cố gắng để thêm vào đầu mã. 'request.setValue (" Một số giá trị ", forHTTPHeaderField:" Content-Type ")' điều này có phù hợp với bạn không? – Sashi

+0

thử tiêu đề này request.addValue ("text/html", forHTTPHeaderField: "Content-Type") –

+0

Tôi đã thử điều đó, nhưng nó không hoạt động. Cuối cùng sử dụng myParameters.dataUsingEncoding làm việc cho tôi, tôi đã sử dụng một cái gì đó khác đó là lý do tôi nghĩ rằng nó không hoạt động. Cảm ơn đã giúp đỡ. – Sashi

0

Mẫu Mã

- (void)reqUserBalance:(NSString*)reward_scheme_id id:(NSString*)user_id success:(void (^)(id responseObject))success failure:(void (^)(id responseObject))failure{ 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@reward/%@/user/%@/balance",URL_SERVER,reward_scheme_id,user_id]]; 
    NSLog(@"%@",url); 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"true" forHTTPHeaderField:@"Bypass"]; 

    [NSURLConnection sendAsynchronousRequest:request 
             queue:[NSOperationQueue mainQueue] 
          completionHandler:^(NSURLResponse *response, 
               NSData *data, NSError *connectionError) 
    { 
         options:kNilOptions error:NULL]; 

     if (data.length > 0 && connectionError == nil) 
     { 
      NSDictionary * userPoints = [NSJSONSerialization JSONObjectWithData:data 
                     options:0 
                     error:NULL]; 

      NSString * points = [[userPoints objectForKey:@"points"] stringValue]; 
      NSLog(@"%@",points); 
      [SecuritySetting sharedInstance].usearAvailablePoints = points; 


     } 
    }]; 

} 
1

Tôi biết cuối của nó, nhưng có thể giúp đỡ người khác, Đối với SWIFT 3,0

let url = NSURL(string: "http://www.yourwebsite.com") 
    let mutAbleRequest = NSMutableURLRequest(URL: url!) 
    mutAbleRequest.setValue("YOUR_HEADER_VALUE", forHTTPHeaderField:"YOUR_HEADER_NAME") 
    myWebView.loadRequest(mutAbleRequest) 
Các vấn đề liên quan