2015-01-26 3 views
0

Я пишу быстрый код для отправки HTTP-запроса на сервер php. Но мой php-скрипт всегда получает странное тело сообщения, потому что параметры обертываются с помощью опции(), если я отправляю такие параметры, как «id = john & password = 1234», сервер получит опцию (id = john & password = 1234) , Но это не то, что я хочу, потому что php не может анализировать параметры обычным способом. Я понятия не имею, что здесь происходит;Почему тело запроса HTTP-сообщения всегда завернуто дополнительным текстом в приложении Swift

var postString: String = "id=john&password=1111" 
request.HTTPBody = (postString.dataUsingEncoding(NSUTF8StringEncoding)) 
println("Body will send: \(request.HTTPBody)") 

var postLength:NSString = String(postString2.dataUsingEncoding(NSUTF8StringEncoding)!.length) 
request.setValue(postLength, forHTTPHeaderField: "Content-Length") 
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
request.setValue("multipart/form-data", forHTTPHeaderField: "Accept") 

После вышеуказанного подготовительного кода я использую метод dataTaskWithRequest для отправки сообщения. После этого вопроса в течение нескольких дней я схожу с ума по этой нерешенной проблеме. Нужна подсказка, чтобы исправить это. Пожалуйста, порекомендуйте!

+0

Вы уверены, что сервер получает это, или это то, что вы видите в журналах? – jrturton

+1

Я подозреваю, что вы видите, что «Тело отправит: Необязательно ...» в журналы вашего устройства (в отличие от журналов сервера). Если это так, его можно эффективно игнорировать, поскольку «HTTPBody» является необязательным значением, поэтому ваш println сообщает вам, что, обернув его. Само фактическое тело не будет содержать дополнительных. –

+0

Я также отмечаю, что вы настраиваете тело, используя postString и Content-Length, используя postString2. –

ответ

-1

Просто измените свою переменную и добавьте '!' к вашей переменной. Таким образом, он больше не является факультативным, и у вас нет такой проблемы.

var postString: String! = "id=john&password=1111" 
+0

Редко объявляет переменную с! правильный ответ, и в этом случае это определенно не так, поскольку нет ничего необязательного в объявлении 'postString'. Оно всегда будет иметь значение« id = john & password = 1111 », –

1

Я нашел проблему!

Правильное объявление типа контента;

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")  

Неверное объявление типа контента;

request.setValue("application/json", forHTTPHeaderField: "Content-Type")  

Большое спасибо за совет и напоминание! Наконец, я понимаю, что проблема заключается не в необязательной завернутой строке, а в других свойствах http!

Вчера я использую php для эха запроса тела клиенту для отладки, и я всегда получал строку, обернутую опциональным, это глупо! После прочтения этих комментариев я прошу программиста php регистрировать каждый тело запроса в локальном файле и проверять содержимое ................. нет необязательной завернутой строки.

Извините за глупый код и благодарит за вашу помощь! Вы, ребята, потрясающие!