NSMutableURLRequest - Почему он не устанавливает значения заголовка с обычной строкой NSString? - PullRequest
0 голосов
/ 22 декабря 2010

Похоже, что значения настройки для поля заголовка (т. Е. @ "Content-Type") не примут значение, если оно не кодировано в base64. Документы метода говорят, что требуется простая строка NSString, так что это действительно не должно иметь значения. Тем не менее, кодирование таким образом, кажется, делает бесполезным значение для запроса post ... верно? Смотрите ниже:

[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`*

Есть идеи у кого-нибудь?

Спасибо!

Me

Ответы [ 2 ]

0 голосов
/ 23 декабря 2010

Итак, во-первых, спасибо за все ваши ответы!

Во-вторых, все заголовки включены, запрос отправляется, и я фактически получаю ответ от сервера, отличного от «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

0 голосов
/ 22 декабря 2010

Избавьтесь от новой строки здесь: boundary==_27da60ee13b84794c5873572c502aaae\n.Измените это на boundary==_27da60ee13b84794c5873572c502aaae.Вероятно, это способ защитить себя от попыток ввести дополнительные заголовки.

...