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?

Raphael
sumber

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"];
Larry Hipp
sumber
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")
Beslan Tularov
sumber
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];
Ram S
sumber
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)
Umair Khalid
sumber
0

Anda dapat menambahkan nilai NSMutableURLRequestuntuk HeaderField:

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

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

Ini bekerja untuk saya.

Saroj Kumar ojha
sumber
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;


         }
     }];

}
Binoy jose
sumber