簡體   English   中英

來自PHP的HTTP POST,沒有cURL

[英]HTTP POST from PHP, without cURL

我正在使用這篇文章中給出的示例函數:

<?php
function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}
?>

我也嘗試過使用file_get_contents()的類似方法,如下所示:

$options = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>
      "Accept-language: en\r\n".
      "Content-type: application/x-www-form-urlencoded\r\n",
    'content'=>http_build_query(
        array(
            'arg1'=>'arg_data_1',
            'oper'=>'get_data',
            'arg2'=>'arg_data_2',
            'id_number'=>'7862'
        ),'','&'
    )
));

$context = stream_context_create($options);
$refno = file_get_contents('/path/to/script/script.php',false,$context);

var_dump($refno);

使用這兩個腳本,來自服務器腳本的響應是相同的,它是script.php的TEXT。 服務器腳本的代碼永遠不會開始執行,並且腳本的文本內容(PHP代碼)將返回到原始腳本。

有點奇怪,它不會返回所有文本,只是某些部分......我嘗試制作一個只包含以下內容的測試腳本( test.php ):

<?php
echo '{"a":1,"b":2,"c":3,"d":4,"e":5}';
?>

但是這不會從POST請求中返回任何內容,所以我沒有包含它。 script.php是一個必須更長的腳本,它執行大量邏輯和MySQL查詢然后返回一個JSON對象。

所需的輸出是讓PHP代碼執行並返回一個JSON對象(它與ajax一起工作的方式)。

我究竟做錯了什么?

您正在嘗試訪問腳本localy。 你必須像任何其他外部腳本一樣調用它

$refno = file_get_contents('http://yourhost/path/to/script/script.php',false,$context);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM