调用新的HttpRequest失败

时间:2010-09-30 18:11:16

标签: php

我正在尝试使用PHP脚本。该脚本的目的是调用Web服务。我已经将脚本简化为最简单的组件,但它仍然失败了。这是:

<?php
print "Hello";
$request = new HttpRequest('http://www.pivotaltracker.com/services/v3/source_commits', HttpRequest::METH_POST);
print "Done";
?>

输出结果为:

D:\svn\svndb\hooks>"c:\Program Files\PHP\php.exe" -f test.php
Hello
D:\svn\svndb\hooks>

如您所见,尝试实例化HttpRequest实例时脚本失败。但是,没有任何例外。

我不是一个php程序......我只是想让这个功能正常运行。我怀疑我没有加载我需要的扩展库...但我无法弄清楚哪一个是,如果确实是那个问题。任何帮助将不胜感激。

我在Windows 2003上运行。我正在运行php 5.3.3。

我确实运行了phpinfo(),但由于它太大而犹豫是否要在此处发布结果。是否有一段phpinfo()输出有助于提供?

提前致谢。

鲍勃

4 个答案:

答案 0 :(得分:6)

error_reporting(E_ALL);放在前面,看看会发生什么。

我敢打赌,HTTPRequest类不存在。 HTTP扩展名为PECL package that needs to be installed separately

答案 1 :(得分:2)

谢谢大家的回答。他们都被发现了。我以为我会对我最后所做的事情进行总结,以防它帮助其他人。

问题确实是我没有安装http PECL扩展。不幸的是,我在Windows上并且没有这个扩展的分配,我不想在这个盒子上安装microsoft工具以便能够编译源代码。所以,我采用了上面列出的建议并使用curl实现了它。

我正在处理的脚本是使用http://www.pivotaltracker.com上的优秀php脚本将svn集成到http://phpjack.com/content/pivotal-tracker-and-subversion。我修改了该脚本如下(如果其他人在类似的地方):

$request = new HttpRequest('http://www.pivotaltracker.com/services/v3/source_commits', HttpRequest::METH_POST);
$headers = array(
  'X-TrackerToken' => $token,
  'Content-type'  => 'application/xml'
);
$request->setHeaders($headers);
$request->setBody("<source_commit><message>$message</message><author>$author</author><commit_id>$rev</commit_id></source_commit>");
$request->send();

成了

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml","X-TrackerToken: $token"));
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch);
curl_close ($ch);
print $result;

再次感谢所有优秀及时的建议。

答案 2 :(得分:1)

  1. error_reporting(E_ALL);
  2. 报告错误
  3. 启用显示错误ini_set('display_errors',1);
  4. 最好从php.ini更改这些设置。 如果它不工作,请查看apache logs(error.log)

答案 3 :(得分:1)

你可以将cURL用于这个简单的目的:

<?php
$url = "http://www.pivotaltracker.com/services/v3/source_commits";
$ch = curl_init();

// set the target url
curl_setopt($ch, CURLOPT_URL, $url);

// howmany parameter to post
curl_setopt($ch, CURLOPT_POST, 1);

// parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, "someParameter=someValue");

$result = curl_exec ($ch);
curl_close ($ch);

print $result;
?>

或使用fsockopen()连接到服务器,fwrite发送原始http发布请求。