swift — Alamofire не размещает PHP-скрипт

Я создаю быстрое приложение, где мне нужно разместить данные на моем собственном веб-сервере.
На данный момент мой быстрый код выглядит следующим образом.

fileprivate class AlamofireHelper {
static var Manager : Alamofire.SessionManager = {
// Create the server trust policies
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"192.168.1.243": .disableEvaluation
]
// Create custom manager
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
let man = Alamofire.SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
return man
}()

}
class UploadHelper
{

private var _postData = [String:Any]()
private let almoHelper = AlamofireHelper.Manager
init(username:String) {
_postData["username"] = username
print("Setup")
submitRequest()
}

func submitRequest()
{
print("Data is: \(_postData)")
almoHelper.request("http:/192.168.1.243/networkStorage", method: .post, parameters: _postData, encoding: JSONEncoding.default).responseString { (responce) in
print("Responce: \(responce)")
}
}
}

PHP:

<?php
echo "POST: " . var_dump($_POST) . "\n\n\n\n";
echo "GET: " . var_dump($_GET);
?>

Единственная проблема, когда я запускаю код swift let helper = UploadHelper(username: iProgram)Я получаю следующий ответ от моего PHP-скрипта:

Data: ["username": "iProgram"]
Responce: SUCCESS: array(0) {
}
POST:array(0) {
}
GET:

Почему мои переменные POST и GET пусты? Я понимаю, что GET пуст, потому что я только отправляю данные POST, но разве POST не должен показывать что-то вроде «username = iProgrammer»?

Наконец, вот HTTP-запрос, который я перехватил из костюма отрыжки:

GET /networkStorage/ HTTP/1.1
Host: 192.168.1.243
Accept: */*
User-Agent: Network%20Storage/1 CFNetwork/808.2.16 Darwin/16.3.0
Accept-Language: en-gb
Accept-Encoding: gzip, deflate
Connection: close

Редактировать:
По какой-то причине, когда я использую приведенный ниже код и изменяю свой PHP-скрипт, чтобы показать переменную ‘GET’, я вижу данные, которые он должен отправить.

almoHelper.request("http://192.168.1.243/networkStorage", method: .get, parameters: _postData).responseString { (myResponce) in
let result = myResponce.result
print("Result is: \(result.value!)")
}

И вот запрос, который я перехватил из набора отрыжки:

GET /networkStorage/?username=iProgram HTTP/1.1
Host: 192.168.1.243
Accept: */*
User-Agent: Network%20Storage/1 CFNetwork/808.2.16 Darwin/16.3.0
Accept-Language: en-gb
Accept-Encoding: gzip, deflate
Connection: close

1

Решение

Прежде всего, var_dump ничего не возвращает, выводит результат, поэтому используйте

echo "POST: "; var_dump($_POST); echo "\n\n\n\n";

или же

echo "POST: " . print_r($_POST, true) . "\n\n\n\n";

GET /networkStorage/ HTTP/1.1 показывает, что вы делаете запрос GET, а не POST. Кроме того, у вас неправильная кодировка JSONEncoding.defaul, Попробуйте немного изменить код запроса:

almoHelper.request("http:/192.168.1.243/networkStorage", method: .post, parameters: _postData, encoding: URLEncoding.httpBody).responseString { (responce) in
print("Responce: \(responce)")
}

Если это не работает, попробуйте изменить URL-адрес с http:/192.168.1.243/networkStorage в http:/192.168.1.243/networkStorage/ или же http:/192.168.1.243/networkStorage/index.php,
Это может решить проблему при отправке запроса /networkStorageотправляет новый запрос /networkStorage/ как показано в захваченных данных от Burpsuit.

1

Другие решения

Почему мои переменные POST и GET пусты? Я понимаю, что GET пуст, потому что я только отправляю данные POST, но разве POST не должен показывать что-то вроде «username = iProgrammer»?

Нет. $_POST заполняется только для HTML-подобной кодировки, такой как application / x-www-form-urlencoded или multipart / form-data. Похоже, что вы отправляете это JSON, в этом случае вам нужно прочитать php://input поток, чтобы добраться до данных.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector