2017-07-04 13 views
0

問題下記の実行機能でfile_get_contentsを使用してGETが送信されているようです。私の人生のために、私は理由を理解することができません。 POSTを使ってPostmanでapiサーバーをテストしたところ正しく動作しています。.phpサーバーにPOSTを送信しない(代わりにGETが送信される)

最初の関数は、サーバーに送信されるリクエストを渡すために使用されます。 2番目の関数は、form_handler.phpファイルにあり、execute()を介してサーバーに送信するデータを作成します。

api_handler.php

<?php 
function execute($command, $context = NULL) 
{ 
    $url_scheme = "http://"; 
    if (isset($_SERVER['HTTPS'])) 
    { 
     $url_scheme = "https://"; 
    } 
    $url_host = $_SERVER['HTTP_HOST']; 
    $url_api = "/SkedApi/"; 
    $url = $url_scheme.$url_host.$url_api.$command; 

echo $url . "<br/>"; 
var_dump($context); 
var_dump(headers_list()); 
    $response = file_get_contents($url, false, $context); 
var_dump(headers_list()); 
echo $response; 
    if ($response) 
    { 
     $output = json_decode($response, true); 
    } 
    else 
    { 
     $output = "error"; 
    } 
    return $output; 
} 

?> 

users_handler.php私のApacheのアクセスファイルから

$test = array ('foo' => 'bar', 'bar' => 'baz'); 
$postdata = http_build_query($test); 

echo $postdata; 

$opts = array (
    'http' => array (
     'method' => 'POST', 
     'header'=> "Content-type: application/x-www-form-urlencoded\r\n" 
      . "Content-Length: " . strlen($postdata) . "\r\n", 
     'content' => $postdata 
     )); 

var_dump($opts); 

$context = stream_context_create($opts); 

print_r($context); 
$result = execute("Users", $context); 

if ($result) 
{ 
    echo "YES</br>"; 
} 

::1 - - [04/Jul/2017:16:02:00 -0400] "POST /SkedApi/Users HTTP/1.0" 301 239 
::1 - - [04/Jul/2017:16:02:00 -0400] "GET /SkedApi/Users/ HTTP/1.0" 200 196 
::1 - - [04/Jul/2017:16:02:00 -0400] "POST /SkedAvailability/users_handler.php HTTP/1.1" 200 2688 

免責事項:すべてのvar_dumpsについては申し訳ありません。

+0

の可能性のある重複した[Apacheの301リダイレクトとポストデータを保存](https://stackoverflow.com/questions/13628831/apache-301-redirect-and-preserving-post-data)それは働いた – vhu

答えて

0

ログには、POSTリクエストに対する301の応答と、同じURLへの200の応答と、末尾にスラッシュが付加されて表示されています。

あなたusers_handler.phpこれに

$result = execute("Users", $context); 

のこの行を変更した場合はどうなりますか?

$result = execute("Users/", $context); 
+0

...これでリダイレクトを行い、POSTデータを渡す最善の方法を見つけ出す必要があります – keelerjr12

+0

すべてのPOST要求に対して応答コード307の書き換えルールを追加できます。簡単なオプションは実行関数を変更して$ url変数の末尾にスラッシュを追加するだけです。 – miknik

+0

残念ながら[R = 307]は機能しません。 – keelerjr12

関連する問題