1
我使用this post给出的示例功能:HTTP POST从PHP,没有卷曲
<?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一起工作的方式)。
我在做什么错?
你只需读本地文件 - 你完全绕过Web服务器,所以PHP代码没有被加工成成品的内容。 – andrewsi
为什么不使用卷曲? – Motes
http://stackoverflow.com/questions/2367458/php-post-data-with-fsockopen – Motes