使用file_get_content发布数据

时间:2011-07-28 05:38:38

标签: php http post

我已经就如何使用帖子file_get_content进行了一些研究。我也读过this one这是我老实说不明白,因为我不熟悉PHP。下面是我的PHP代码,用于获取我的json,并使用方法GET将其用于我的ajax请求。:

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

现在,我正在使用方法POST,我不知道如何修改我的PHP代码以从我的javascript发布我的数据。以下是我要在我的网址请求中发布的data(也就是我在方法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"}

3 个答案:

答案 0 :(得分:2)

您可以将Stream Context作为第三个参数传递给file_get_contents。使用流上下文,您可以影响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
        )
    )
));

答案 1 :(得分:1)

您需要的是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);

答案 2 :(得分:0)

如果我理解正确(我可能不会),你应该使用CURL CURL是在PHP中提交POST请求的方法。 (但这不是唯一的方法) 你正在做的是通过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);
?>