NSURLRequest ตั้งค่าส่วนหัว HTTP


87

ฉันต้องการตั้งค่าส่วนหัว HTTP สำหรับคำขอ ในเอกสารประกอบสำหรับคลาส NSURLRequest ฉันไม่พบอะไรเกี่ยวกับส่วนหัว HTTP ฉันจะตั้งค่าส่วนหัว HTTP ให้มีข้อมูลที่กำหนดเองได้อย่างไร

คำตอบ:


183

คุณต้องใช้NSMutableURLRequest

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

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

หรือเพิ่มส่วนหัว:

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

1
สิ่งที่ฉันกำลังมองหา !! ยกนิ้วให้ !!
Apple_iOS0304

1
มี API สำหรับเพิ่มพจนานุกรมส่วนหัวหรือไม่?
Paul Brewczynski

1
ตอบโจทย์สุด ๆ ! ฉันต้องการชี้ให้เห็นว่าคำตอบของ RamS มีเอกสารที่ดี
fskirschbaum

@larry ช่วยตอบด้วยนะครับ: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

สำหรับ 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")

ฉันใช้รหัสประเภทเดียวกันเพื่อส่งคำขอ แต่กลับไม่มีข้อมูล ฉันลองทำตามสิ่งที่ไม่ถูกต้องและสิ่งเดียวที่ฉันคิดได้คือค่าตอบกลับที่กลับมามีค่า "Content-Type" ต่างจากที่ฉันพยายามต่อท้ายโค้ด request.setValue("Some value", forHTTPHeaderField: "Content-Type")สิ่งนี้ใช้ได้กับคุณหรือไม่
Sashi

ลองใช้ส่วนหัวนี้ request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

ฉันลองแล้วเช่นกัน แต่ก็ไม่ได้ผล ในที่สุดการใช้ myParameters.dataUsingEncoding ก็ใช้ได้ผลสำหรับฉันฉันใช้อย่างอื่นนั่นเป็นเหตุผลที่ฉันคิดว่ามันใช้ไม่ได้ ขอบคุณสำหรับความช่วยเหลือ
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
คุณควรเพิ่มคำอธิบายสำหรับรหัสที่คุณโพสต์ไว้
MasterAM

setValue: @ "application / x-www-form-urlencoded" หมายความว่าอะไรกำหนดเองหรือไม่
Dilara Albayrak

ในกรณีของการสนับสนุนแบบ จำกัด สำหรับ POST ในซอฟต์แวร์ไคลเอ็นต์ HTTP ซึ่งไม่สามารถส่งข้อมูลบริสุทธิ์ในเนื้อหาข้อความ HTTP ได้ RESTfm สามารถจัดการข้อมูลที่เข้ารหัสในรูปแบบแอปพลิเคชัน / x-www-form-urlencoded หรือหลายส่วน / แบบฟอร์มข้อมูล . หมายเหตุ: รูปแบบแอ็พพลิเคชัน / x-www-form-urlencoded และ multart / form-data ใช้ได้กับเมธอด HTTP POST เท่านั้นหมายเหตุ 2: รูปแบบนี้ใช้รูปแบบ 'การเข้ารหัส URL' เดียวกันตามที่ต้องการสำหรับพารามิเตอร์สตริงการสืบค้น GET ตามที่อธิบายไว้ . ข้อดีรองรับขนาดข้อมูลที่ใหญ่กว่าที่เป็นไปได้โดยใช้สตริงการสืบค้น GET
ราม

อ้างอิงลิงค์นี้สำหรับรายละเอียดเพิ่มเติม restfm.com/restfm-manual/web-api-reference-documentation/…
ราม

2

ฉันรู้ว่ามันช้าไป แต่อาจช่วยคนอื่นได้สำหรับ 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

คุณสามารถเพิ่มมูลค่าNSMutableURLRequestสำหรับ HeaderField:

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

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

นี่ใช้งานได้สำหรับฉัน


0

ตัวอย่างรหัส

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


         }
     }];

}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.