我正在使用http_build_query
构建$_POST查询,但我需要为一个键传输多个值。该问题涉及美国海军天文台的HTML表单弗拉格斯塔夫车站。在Catalogue Lists
部分中,您可以选择要显示的多个值。
提交请求后,您将获得搜索参数的概述。一个简短的摘录显示多个值引用同一个键。
...
colbits = cb_id
colbits = cb_ra
...
colbits = cb_mag
...
问题是,我看不到在PHP中为同一个键传输多个值的机会。如果我按照以下方式执行,则键的值将被覆盖。
$url = 'http://www.nofs.navy.mil/cgi-bin/tfch4.test.cgi';
$data = array('colbits' => 'cb_id', 'colbits' => 'cb_ra', 'colbits' => 'cb_mag');
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded'r'n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
对此有什么变通办法吗?我已经尝试将不同的值作为关键字"colbits"的数组发送,但这并没有如预期的那样起作用。
如果您想在$_POST中获得一个名为"colbits"的数组:$_POST['colbits'] == ['cb_id','cb_ra','cb_mag']
。。。正确的方法是在"colbits"定义后放一对方括号,如下所示:
$data = array('colbits[]' => 'cb_id', 'colbits[]' => 'cb_ra', 'colbits[]' => 'cb_mag');
通过http_build_query
将params附加到生成的查询字符串中就可以了。
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded'r'n",
'method' => 'POST',
'content' => http_build_query($data)."&colbits=cb_id&colbits=cb_altid&colbits=cb_ra&colbits=cb_mag",
),
);