我尝试提交一个表单到远程服务器:http://openconvert.clarin.inl.nl/openconvert/tagger#text,因为你可以看到所需的字段是input
和format
,和动作url是http://openconvert.clarin.inl.nl/openconvert/text/
,所以我尝试以下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;
}
$remoteurl="http://openconvert.clarin.inl.nl/openconvert/text";
$rawdata=array(
'input'=>'test',
'format'=>'text');
$data=http_build_query($rawdata, '', '&'); //flags_, myvar_
var_dump($data);
echo "<br />";
echo do_post_request($remoteurl,$data,'Content-Type: text/html');
?>
我不知道为什么服务器找不到我的数据?
输出为:
string(26) "input=test&format=text"
<br /><?xml version="1.0" encoding="UTF-8"?>
<error>Insufficient parameters. Required parameters: input, format</error>
可能有其他问题,但http_build_query中的&
值肯定是错误的。您没有将url编码的数据嵌入到html文档中,因此不应该对&进行html转义。将该行替换为:
http_build_query($rawdata, '', '&');
应该更好,但它可能不是您的100%解决方案。
注:永远不要使用@
。您正在抑制您应该看到的真实错误。