为什么我的HTTP请求从PHP失败?

时间:2015-10-23 17:04:58

标签: php http-post

我尝试将表单提交到远程服务器:http://openconvert.clarin.inl.nl/openconvert/tagger#text,因为您可以看到所需的文件是inputformat,操作网址是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, '', '&amp;'); //flags_, myvar_
var_dump($data);
echo "<br />";
echo do_post_request($remoteurl,$data,'Content-Type: text/html');
?>

我不知道为什么服务器找不到我的数据?

输出结果为:

string(26) "input=test&amp;format=text"
<br /><?xml version="1.0" encoding="UTF-8"?>
<error>Insufficient parameters. Required parameters: input, format</error>

1 个答案:

答案 0 :(得分:0)

可能还有其他问题,但http_build_query中的&amp;值肯定是错误的。您没有将您的urlencoded数据嵌入到html文档中,因此您不应该使用html-escape&符号。用以下内容替换该行:

http_build_query($rawdata, '', '&amp;'); 

应该更好,但可能不是你解决方案的100%。

P.S。:永远不要使用@。您正在抑制应该看到的实际错误。