NSURLRequest menyetel header HTTP


87

Saya perlu menyetel header HTTP untuk permintaan. Dalam dokumentasi untuk kelas NSURLRequest, saya tidak menemukan apa pun tentang header HTTP. Bagaimana cara mengatur header HTTP agar berisi data khusus?

Jawaban:


183

Anda perlu menggunakan NSMutableURLRequest

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

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

atau untuk menambahkan tajuk:

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

1
Hanya apa yang saya cari !! Jempol untuk Anda !!
Apple_iOS0304

1
Apakah ada API untuk menambahkan kamus tajuk?
Paul Brewczynski

1
Jawaban luar biasa! Saya ingin menunjukkan bahwa jawaban RamS memiliki dokumentasi yang bagus.
fskirschbaum

@larry bisakah Anda menjawab ini juga: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

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

Saya menggunakan jenis kode yang serupa untuk membuat permintaan, tetapi mengembalikan data nihil . Saya mencoba apa yang salah dan satu-satunya hal yang saya dapat muncul adalah nilai respon kembali memiliki nilai yang berbeda untuk "Content-Type" dibandingkan dengan apa yang saya coba tambahkan di awal kode. request.setValue("Some value", forHTTPHeaderField: "Content-Type")apakah ini berhasil untukmu?
Sashi

coba permintaan header ini.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

Saya mencobanya juga, tetapi tidak berhasil. Akhirnya menggunakan myParameters.dataUsingEncoding bekerja untuk saya, saya menggunakan sesuatu yang lain itulah alasan saya pikir itu tidak berfungsi. Terima kasih untuk bantuannya.
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
Anda mungkin harus menambahkan beberapa penjelasan untuk kode yang telah Anda posting.
MasterAM

Apa yang dimaksud dengan setValue: @ "application / x-www-form-urlencoded", apakah sesuai selera?
Dilara Albayrak

Dalam kasus dukungan terbatas untuk POST di perangkat lunak klien HTTP di mana data murni tidak dapat dikirimkan dalam badan pesan HTTP, RESTfm dapat menangani data yang dikodekan baik dalam format application / x-www-form-urlencoded atau multipart / form-data . Catatan: Format application / x-www-form-urlencoded dan multipart / form-data hanya berlaku untuk metode HTTP POST Catatan 2: Format ini menggunakan skema 'pengkodean URL' yang sama seperti yang diperlukan untuk parameter string kueri GET seperti yang dijelaskan di sini . Keuntungan Mendukung ukuran data yang lebih besar daripada yang dimungkinkan dengan menggunakan string kueri GET.
Ram S

Lihat tautan ini untuk detail lebih lanjut restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S

2

Saya tahu ini terlambat tetapi dapat membantu orang lain, Untuk 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

Anda dapat menambahkan nilai NSMutableURLRequestuntuk HeaderField:

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

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

Ini bekerja untuk saya.


0

Kode sampel

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


         }
     }];

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.