您没有发布到PHP脚本

您没有发布到PHP脚本,php,swift,post,get,alamofire,Php,Swift,Post,Get,Alamofire,我正在创建一个swift应用程序,需要将数据发布到我自己的Web服务器。 目前,我的swift代码如下所示 fileprivate class AlamofireHelper { static var Manager : Alamofire.SessionManager = { // Create the server trust policies let serverTrustPolicies: [String: ServerTrustPolicy]

我正在创建一个swift应用程序,需要将数据发布到我自己的Web服务器。
目前,我的swift代码如下所示

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:

为什么我的POST和GET变量为空?我知道GET是空的,因为我只发送POST数据,但是POST不应该显示“username=iProgrammer”之类的内容吗

最后,这里是我从burp suit中捕获的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!)")
        }
这是我从burp suite截获的请求:

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
为什么我的POST和GET变量为空?我知道GET是空的,因为我只发送POST数据,但是POST不应该显示“username=iProgrammer”之类的内容吗


否。
$\u POST
仅针对类似HTML表单的编码填充,如application/x-www-form-urlencoded或multipart/form数据。看起来您发送的是JSON,在这种情况下,您需要阅读
php://input
流获取数据。

首先,
var\u dump
不返回任何内容,它会输出结果,所以使用

echo "POST: "; var_dump($_POST); echo "\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捕获的数据所示。

当我从那里回显数据时,您是否可以尝试使用@Paweldubil读取原始post数据,我根本不会打印任何内容。如果您查看我对pawl的评论,文件获取内容(“php://input)不起作用。它什么也不印。
echo "POST: "; var_dump($_POST); echo "\n\n\n\n";
echo "POST: " . print_r($_POST, true) . "\n\n\n\n";
almoHelper.request("http:/192.168.1.243/networkStorage", method: .post, parameters: _postData, encoding: URLEncoding.httpBody).responseString { (responce) in
    print("Responce: \(responce)")
}