Отправлять данные с помощью file_get_content

Я провел некоторое исследование относительно использования file_get_content с сообщением. И я также прочитал этот, который я, честно говоря, не понимаю, так как я не знаком с PHP. Ниже мой PHP-код в получении моего json и использовал его для моего запроса ajax, используя methog GET.:

<?php 
    echo(file_get_contents("http://localhost:8001/" . $_GET["path"] . "?json=" . urlencode($_GET["json"])));
?>

Теперь я использую метод POST, и я не знаю, как изменить свой PHP-код, чтобы опубликовать мои данные с моего javascript. Ниже представлен мой data, который я хотел бы разместить в своем запросе url (это также то, что я использовал как json в методе GET):

{"SessionID":"9SQLF17XcFu0MTdj5n",
  "operation":"add",
  "transaction_date":"2011-7-28T00:00:00",
  "supplier_id":"10000000108",
  "wood_specie_id":"1",
  "lines":  [{"...":"...","..":"..."},{"...":"...","..":"..."}],
  "scaled_by":"SCALED BY",
  "tallied_by":"TALLIED BY",
  "checked_by":"CHECKED BY",
  "total_bdft":"23.33",
  "final":"N"}

Мне просто нужно изменить этот код

echo(file_get_contents("http://localhost:8001/" . $_GET["path"] . "?json=" . urlencode($_GET["json"])));

с POST для отправки моего сообщения мои данные.

РЕДАКТИРОВАТЬ: Мне нужно создать такой запрос:

http://localhost/jQueryStudy/RamagalHTML/processjson.php?path=getData/supplier?​json={"SessionID":"KozebJ4SFqdqsJtRpG6t1o3uQxgoeLjT"%2C"dataType":"data"}

Ответы

Ответ 1

Вы можете передать контекст потока в качестве третьего аргумента в file_get_contents. С помощью контекста Stream вы можете влиять на то, как будет выполнен запрос HTTP, например. вы можете изменить метод, добавить Контент или arbirtrary заголовки.

file_get_contents($url, false, stream_context_create(
    array (
        'http' => array(
            'method'=>'POST',
            'header' => "Connection: close\r\nContent-Length: $data_len\r\n",
            'content'=>$data_url
        )
    )
));

После каждого запроса PHP автоматически заполняет $http_response_header, который будет содержать всю информацию о запросе, например. Код состояния и прочее.

$data_url = http_build_query (array('json' => $_GET["json"]));
$data_len = strlen ($data_url); 

echo file_get_contents("http://localhost:8001/" . $_GET["path"], false, stream_context_create(
    array (
        'http' => array(
            'method'=>'POST',
            'header' => "Connection: close\r\nContent-Length: $data_len\r\n",
            'content'=>$data_url
        )
    )
));

Ответ 2

Вам нужно cURL.

Пример:

$dataString = "firstName=John&lastname=Smith";

$ch = curl_init();

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,2); // number of variables
curl_setopt($ch,CURLOPT_POSTFIELDS,$dataString);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

Ответ 3

Если я понимаю вас правильно (я не знаю), вы должны использовать CURL.
CURL - это способ отправки запросов POST в PHP. (но это не единственный способ) Что вы делаете, это отправка данных методом GET.

некоторые думают так, пожалуйста, прочитайте об этом, этот не будет работать из коробки

<?php
 $ch = curl_init("http://localhost:8001/" . $_GET["path"] );
 curl_setopt ($ch, CURLOPT_POST, 1);
 curl_setopt ($ch, CURLOPT_POSTFIELDS, "json=".urlencode($_GET["json"]));
 curl_exec ($ch);
 curl_close ($ch);
?>