是否有另一种方式在PHP中执行此HTTP请求?

时间:2010-10-13 16:45:08

标签: php httpwebrequest

function do_post_request($url, $data, $optional_headers = null) {

    $request = new HttpRequest($url, HttpRequest::METH_POST);
    $request->setBody($data);
        $response = $request->send();
        return $response->getBody();

}

这段代码似乎没有用,似乎崩溃了我的脚本。我不知道是不是因为我没有php_http模块,但我可以使用它吗?

例如curl?我已经尝试过卷曲,但我对此并不了解,而且卷曲后我从服务器返回了一个“错误的请求”,我试图连接到400状态。

一切都会好的

由于

汤姆

编辑:

function do_post_request($url, $data, $optional_headers = null) {


    $request = new HttpRequest($url, HttpRequest::METH_POST);
     $request->setBody($data);
  $response = $request->send();
  return $response->getBody();

}


echo "before";

$response = do_post_request($url, $data);
echo "After";

这样做会使“之前”出现在页面上。但没有“后”。

管理完错误报告后,我得到了这个:

Fatal error: Class 'HttpRequest' not found in /home/sites/ollysmithwineapp.com/public_html/mellowpages/geocode.php on line 25

所以我需要另一种方法来处理HTTP请求。

4 个答案:

答案 0 :(得分:1)

是否正确安装并配置了HTTP扩展?

  

安装/配置

     

<强>安装

     

此»PECL扩展名未捆绑   用PHP。

     

安装此PECL的信息   扩展可以在手册中找到   标题为PECL的安装的章节   扩展。附加信息   例如新版本,下载,   源文件,维护者信息,   和CHANGELOG,可以在这里:   »   http://pecl.php.net/package/pecl_http

也许cURl是要走的路

答案 1 :(得分:1)

this question被盗。您可以直接在$data的位置插入CURLOPT_POSTFIELDS代替查询字符串。

<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://www.mysite.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
            "postvar1=value1&postvar2=value2&postvar3=value3");

// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

// further processing ....
if ($server_output == "OK") { ... } else { ... }

?>

答案 2 :(得分:1)

我还使用stream_context_create()找到了一个解决方案。它使您可以更好地控制在POST中发送的内容。

这是一篇博客文章,解释了如何做到这一点。它可以让您轻松指定确切的标题和正文。

http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/

答案 3 :(得分:0)

没有HttpRequest::setBody()方法。您应该使用addPostFields函数,使用关联数组:

function do_post_request($url, $data, $optional_headers = null) {
    $request = new HttpRequest($url, HttpRequest::METH_POST);
    $request->setPostFields($data);
    $response = $request->send();
    return $response->getBody();
}

$responseBody = do_post_request('http://www.example.com',array('examplefield'=>'exampledata'));