NSURLRequest thiết lập tiêu đề HTTP


86

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?

Câu trả lời:


182

Bạn cần sử dụng NSMutableURLRequest

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

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

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

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

1
Chỉ cần những gì tôi đang tìm kiếm!! Thích bạn !!
Apple_iOS0304

1
Có API nào để thêm từ điển tiêu đề không?
Paul Brewczynski

1
Câu trả lời xuất sắc! Tôi muốn chỉ ra rằng câu trả lời của RamS có tài liệu hay.
fskirschbaum

@larry, bạn cũng có thể trả lời câu này không: stackoverflow.com/questions/40342728/…
Chaudhry Talha,

11

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")

Tôi đang sử dụng loại mã tương tự để thực hiện yêu cầu, nhưng nó trả về dữ liệu nil . Tôi đã thử xem có gì sai và điều duy nhất tôi có thể nghĩ ra là giá trị phản hồi quay lại có giá trị khác cho "Loại-Nội dung" trái ngược với những gì tôi đang cố thêm vào đầu mã. request.setValue("Some value", forHTTPHeaderField: "Content-Type")cái này có hiệu quả với bạn không
Sashi

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

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

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
Bạn có thể nên thêm một số giải thích cho mã bạn đã đăng.
MasterAM

SetValue: @ "application / x-www-form-urlencoded" nghĩa là gì, có phải là tùy chỉnh không?
Dilara Albayrak

Trong trường hợp hỗ trợ hạn chế 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ông báo HTTP, RESTfm có thể xử lý dữ liệu được mã hóa ở định dạng ứng dụng / x-www-form-urlencoded hoặc nhiều phần / biểu mẫu-dữ liệu . Lưu ý: Định dạng application / x-www-form-urlencoded và multiart / 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' như được yêu cầu cho các tham số chuỗi truy vấn GET như được mô tả ở đây . Ưu điểm Hỗ trợ kích thước dữ liệu lớn hơn những gì có thể sử dụng chuỗi truy vấn GET.
Ram S

Tham khảo liên kết này để biết thêm chi tiết restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S

2

Tôi biết nó muộn nhưng có thể giúp những 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)

0

Bạn có thể thêm giá trị NSMutableURLRequestcho HeaderField:

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

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

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


0

Mã mẫu

 - (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;


         }
     }];

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.