NSMutableURLRequest - 为什么不使用常规NSString设置标头值?

时间:2010-12-22 19:43:25

标签: objective-c ios nsurlrequest nsmutableurlrequest

看起来标题字段的设置值(即@“Content-Type”)不会取值,除非它是base64编码的。方法文档说它需要一个普通的NSString,所以它确实无关紧要。但是,以这种方式编码似乎使后期请求的值无用......对吧? 见下文:

[req setHTTPBody:allData];
     [req setHTTPMethod:@"POST"];
     [req setValue:@"multipart/related; "
      "boundary==_27da60ee13b84794c5873572c502aaae\n" forHTTPHeaderField:@"Content-Type"]; 

     NSLog(@"\n\n\t\t===headerField content-type===\n\n%@", [req valueForHTTPHeaderField:@"Content-Type"]);

收率:

2010-12-22 09:53:23.008 uploadXMLText[96009:207] 

          ===headerField content-type===

(null)

但是如果我将值字符串@“multipart ...”编码为base64:

收率:

2010-12-22 10:06:37.185 uploadXMLText[96234:207] 

          ===headerField content-type===

bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PT1fMjdkYTYwZWUxM2I4NDc5`*

任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

在此处删除换行符:boundary==_27da60ee13b84794c5873572c502aaae\n。将其更改为boundary==_27da60ee13b84794c5873572c502aaae。这可能是一种保护自己不受试图注入额外标题的方法。

答案 1 :(得分:0)

首先,感谢您的所有答案!

其次,所有标题都在,请求正在发送,我实际上从服务器获得响应而不是" 400:您的请求很糟糕"。

此:

NSMutableString *data = 
    @"--=_27da60ee13b84794c5873572c502aaae\n"
    "Content-Type: application/atom+xml\n\n"

    "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\">"
    "<media:group xmlns:media=\"http://search.yahoo.com/mrss/\">"
    "<media:category scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">Comedy</"
    "media:category><media:description>test</media:description><media:keywords>"
    "foo, var</media:keywords><media:title>test title</media:title></media:group></atom:entry>\n"
    "--=_27da60ee13b84794c5873572c502aaae\n"
    "Content-Type: video/mov\n"
    "Content-Transfer-Encoding: binary\n\n";



    NSMutableData *allData = [NSMutableData dataWithData:[data dataUsingEncoding:NSUTF8StringEncoding]];
    [allData appendData:vidData];
    NSString *str = @"\n--=_27da60ee13b84794c5873572c502aaae--";
    [allData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

发送此正文:

    <atom:entry xmlns:atom="http://www.w3.org/2005/Atom"><media:group xmlns:media="http://search.yahoo.com/mrss/">
<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Comedy</media:category>
<media:description>test</media:description>
<media:keywords>foo, var</media:keywords><media:title>test title</media:title>
</media:group></atom:entry>
    --=_27da60ee13b84794c5873572c502aaae
    Content-Type: video/mov
    Content-Transfer-Encoding: binary

它最终工作并上传了文件!

再次感谢您的帮助,我希望这可以帮助任何未来的观众。

MiL3s