发送帖子请求时遇到了一些问题。
我使用此脚本执行页面http://localname.local/test
,页面http://localname.local/directory/page.php
获取json数据。
$url = "http://localname.local/directory/page.php";
$post = [
"key1" => "hello",
"key2" => 885,
];
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($post),
'timeout' => 10
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ( $result === false ) {
// Handle error
return null;
}
else
return $result;
但是经过10次后,剧本得到了消息:
警告:file_get_contents(http://localname.local/directory/page.php):无法打开流:HTTP请求失败!在第X行的D:\ ... \ html \ test.php
page.php有效,我可以用我的浏览器作为客户端发送帖子请求,但php(或wamp)无法访问或向自己的页面发送请求。
我在wamp 3.0.9上获得了PHP 7.1.7,Apache 2.4.23并且选项allow_url_fopen
已打开。
编辑: CURL
public static function get_content($post)
{
$url = "http://localname.local/directory/page.php";
$query = http_build_query($post);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // Tell cURL that it should only spend X seconds trying to connect to the URL in question.
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // A given cURL operation should only take X seconds max.
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // returns data to function
curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
$data = curl_exec($curl);
if ( curl_errno($curl) )
throw new Exception(curl_error($curl));
curl_close($curl);
return $data;
}
获取
致命错误:未捕获异常:操作在10000毫秒后超时,在第X行的D:\ ... \ html \ test.php中收到0字节
异常:操作在10000毫秒后收到0字节时超时
答案 0 :(得分:1)
要使file_get_contents()打开URL,您必须在php.ini文件中启用allow_url_fopen设置。
安全方面我会建议你用cURL来实现你的目标:
function get_content($url,$post){
$query = http_build_query($post);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // returns data to function
curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
$data = curl_exec($ch);
// if you want to display error messages, do it before curl_close()
//echo curl_errno($ch); // if you want to display error number
//echo curl_error($ch); // if you want to display error message
curl_close($ch);
return $data;
}
echo get_content('http://localname.local/directory/page.php');
答案 1 :(得分:0)
我认为您需要增加CURLOPT_TIMEOUT时间
答案 2 :(得分:0)
真正的问题
test.php
使用session_start()
test.php
在POST request
page.php
page.php
使用session_start()
<<<冷冻 强> 我们不能同时使用2个PHP会话。会话锁定并创建无限循环。
谢谢大家帮我找到解决方案。