2017-01-29 38 views
1

私は自分のWebサーバーにPOSTデータを必要とする迅速なアプリケーションを作成しています。
現時点では、私の迅速なコードはこのように見えます。Alamofire not 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変数は空ですか?私はPOSTデータを送信するだけなのでGETが空であることを理解していますが、POSTは "username = iProgrammer"のようなものではありませんか?

Finalyが、ここで私はげっぷのスーツから取り込んだ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 

編集: 何らかの理由で、私は「GET」を表示するために以下のコードを使用して、私のPHPスクリプトを変更したとき変数、私はそれが送信すべきデータを見ることができます。

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 
+0

<?php $ postdata = file_get_contents( "php:// input")を使用して未加工の投稿データを読み込もうとしますか? ?> –

+0

@PawelDubielそこからデータをエコーアウトすると、何も印刷されません。 – iProgram

答えて

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)") 
} 

http:/192.168.1.243/networkStorage/またはhttp:/192.168.1.243/networkStorage/index.phphttp:/192.168.1.243/networkStorageからURLを変更してみてください。 /networkStorageにリクエストを送信すると、burpsuitのキャプチャしたデータに示されているように、/networkStorage/に新しいリクエストが送信されるため、問題が解決する可能性があります。

0

はなぜPOSTで、変数が空でGET!私はPOSTデータを送信するだけなのでGETが空であることを理解していますが、POSTは "username = iProgrammer"のようなものではありませんか?

番号$_POSTは、application/x-www-form-urlencodedやmultipart/form-dataなどのHTML形式のエンコーディングのために設定されています。あなたが送信しているものがJSONであるように見えます。その場合は、データを取得するためにphp://inputストリームを読む必要があります。

+0

私のコメントをpawlに見ると、file_get_contents( "php:// input")は動作しません。何も印刷しません。 – iProgram

関連する問題