Отредактированный вопрос
Сценарий использования: пользователь (клиент) отправляет запрос на сервер, на котором работает PHP. Я пытаюсь написать код PHP на сервере, например. конечная точка API для обработки запроса.
У меня есть рабочий PHP-код, который извлекает веб-токен json (в виде строки) из запроса JSON, где тип контента указан в запрос от клиента — application/json. Следующий код извлекает строку с помощью php://input, которая работает, пока тип содержимого запроса — application/json.
$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);
$jwt =$jsonArray['jwt'];
var_dump($jwt); //THIS IS FOR DEBUGGING. COMMENTED OUT IN PRODUCTION
Он возвращает следующую строку:
string(414) "hlMox0-LOTS OF CHARACTERS-za2b"
Обратите внимание на префикс:
string(414)
добавлен var_dump. Если я просто отображаю переменную $jwt, она отображает строку сама по себе без этого префикса.
Эта строка веб-токена json может быть успешно декодирована для аутентификации пользователя.
Теперь мне нужно написать код для другой конечной точки для клиентских запросов, которая позволит клиенту отправлять файл изображения и метаданные. В этом случае для поддержки передачи файлов пользователь/клиент должен указать в запросе тип контента multipart/form-data. Однако php/input не работает с составными данными, и единственный способ получить метаданные — из переменной $_POST. В этом случае результирующая строка при извлечении и отображении с помощью var_dump() обозначается var_dump как необязательная.
$jwt = $_POST['jwt'];
var_dump($jwt);
Это дает:
"Optional(414)("hlMox0-LOTS OF CHARACTERS-za2b")";
И снова var_dump добавляет префикс
Необязательно (414)
.
Я не могу декодировать эту переменную. Var_dump предполагает, что, хотя строки во многом одинаковы, они разные. Вторая версия является «дополнительной». Для тех, кто не знаком с термином «необязательный», он используется во многих языках программирования для обозначения переменной, которая явно может иметь либо нулевое значение, либо нет. Очевидно, PHP распознает эту идею с помощью функции var_dump. Однако я не могу найти ничего подробного по этому вопросу в документации.
Почему строка, доступ к которой осуществляется через переменную $_POST, отличается от строки, доступ к которой осуществляется через php://input?
Поскольку var-dump определяет разницу между необязательным параметром и строкой, почему доступ к данным через $_POST дает необязательный параметр вместо строки?
В конечном итоге, как мне преобразовать $_POST['jwt'] получен из $_POST в обычную строку. Что с этим может быть не так?
Заранее благодарим за любые предложения.
Редактировать 2:
Клиентский код на Swift включен по запросу. Согласно примеру @Oliver, это может быть добавление необязательного() к строке на стороне клиента, а PHP интерпретирует это как часть строки.
//Note literal "a jwt string" does not produce error.
let ajwt = UserDefaults.standard.string(forKey: "ajwt")
let simple = ["query":query, "jwt":ajwt,"id":id] as [String : Any]//PROBLEM
let params = ["query":query, "jwt":"a jwt string","id":id] as [String : Any]//NO PROBLEM
let boundary = "Boundary-\(UUID().uuidString)"
let url = URL(string: apiurl)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
// Add string parameters
for (key, value) in params {
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n".data(using: String.Encoding.utf8)!)
body.append("\r\n".data(using: String.Encoding.utf8)!)
body.append("\(value)\r\n".data(using: String.Encoding.utf8)!)
}
// Add image
//append bounded image data to body
// Add final boundary
body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
request.httpBody = body
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-in-php
Переменная $_POST из запроса содержит необязательное значение вместо строки в PHP ⇐ Php
Кемеровские программисты php общаются здесь
1736578624
Anonymous
Отредактированный вопрос
Сценарий использования: пользователь (клиент) отправляет запрос на сервер, на котором работает PHP. Я пытаюсь написать код PHP на сервере, например. конечная точка API для обработки запроса.
У меня есть рабочий PHP-код, который извлекает веб-токен json (в виде строки) из запроса JSON, где тип контента указан в запрос от клиента — application/json. Следующий код извлекает строку с помощью php://input, которая работает, пока тип содержимого запроса — application/json.
$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);
$jwt =$jsonArray['jwt'];
var_dump($jwt); //THIS IS FOR DEBUGGING. COMMENTED OUT IN PRODUCTION
Он возвращает следующую строку:
string(414) "hlMox0-LOTS OF CHARACTERS-za2b"
Обратите внимание на префикс:
string(414)
добавлен var_dump. Если я просто отображаю переменную $jwt, она отображает строку сама по себе без этого префикса.
Эта строка веб-токена json может быть успешно декодирована для аутентификации пользователя.
Теперь мне нужно написать код для другой конечной точки для клиентских запросов, которая позволит клиенту отправлять файл изображения и метаданные. В этом случае для поддержки передачи файлов пользователь/клиент должен указать в запросе тип контента multipart/form-data. Однако php/input не работает с составными данными, и единственный способ получить метаданные — из переменной $_POST. В этом случае результирующая строка при извлечении и отображении с помощью var_dump() обозначается var_dump как необязательная.
$jwt = $_POST['jwt'];
var_dump($jwt);
Это дает:
"Optional(414)("hlMox0-LOTS OF CHARACTERS-za2b")";
И снова var_dump добавляет префикс
Необязательно (414)
.
Я не могу декодировать эту переменную. Var_dump предполагает, что, хотя строки во многом одинаковы, они разные. Вторая версия является «дополнительной». Для тех, кто не знаком с термином «необязательный», он используется во многих языках программирования для обозначения переменной, которая явно может иметь либо нулевое значение, либо нет. Очевидно, PHP распознает эту идею с помощью функции var_dump. Однако я не могу найти ничего подробного по этому вопросу в документации.
Почему строка, доступ к которой осуществляется через переменную $_POST, отличается от строки, доступ к которой осуществляется через php://input?
Поскольку var-dump определяет разницу между необязательным параметром и строкой, почему доступ к данным через $_POST дает необязательный параметр вместо строки?
В конечном итоге, как мне преобразовать $_POST['jwt'] получен из $_POST в обычную строку. Что с этим может быть не так?
Заранее благодарим за любые предложения.
Редактировать 2:
Клиентский код на Swift включен по запросу. Согласно примеру @Oliver, это может быть добавление необязательного() к строке на стороне клиента, а PHP интерпретирует это как часть строки.
//Note literal "a jwt string" does not produce error.
let ajwt = UserDefaults.standard.string(forKey: "ajwt")
let simple = ["query":query, "jwt":ajwt,"id":id] as [String : Any]//PROBLEM
let params = ["query":query, "jwt":"a jwt string","id":id] as [String : Any]//NO PROBLEM
let boundary = "Boundary-\(UUID().uuidString)"
let url = URL(string: apiurl)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
// Add string parameters
for (key, value) in params {
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n".data(using: String.Encoding.utf8)!)
body.append("\r\n".data(using: String.Encoding.utf8)!)
body.append("\(value)\r\n".data(using: String.Encoding.utf8)!)
}
// Add image
//append bounded image data to body
// Add final boundary
body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
request.httpBody = body
Подробнее здесь: [url]https://stackoverflow.com/questions/79346664/post-variable-from-request-contains-optional-instead-of-string-in-php[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия