在PHP中替代HTTPRequest

时间:2014-04-22 06:48:26

标签: php httprequest

我在我的php脚本中使用HttpRequest类,但当我将此脚本上传到我的托管服务提供商的服务器时,执行它时出现致命错误:

致命错误:Class' HttpRequest'在第87行找不到......

我认为原因是因为我的托管服务提供商的php.ini配置不包含支持HttpRequest的扩展。当我联系他们时他们说我们无法在共享主机上安装以下扩展。 所以我想要httpRequest的替代品,我这样做:

   $url= http://ip:8080/folder/SuspendSubscriber?subscriberId=5
    $data_string="";
    $request = new HTTPRequest($url, HTTP_METH_POST);
    $request->setRawPostData($data_string);
    $request->send();    
    $response = $request->getResponseBody();
    $response= json_decode($response, true);
    return $response;

或者如何在curl中使用此请求,因为它不适用于空数据字符串?

4 个答案:

答案 0 :(得分:3)

您可以在php中使用CURL:

$ch = curl_init( $url );
$data_string  = " ";
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data_string );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));   
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );   
$result = curl_exec($ch);
curl_close($ch);    
return $result;

并且空数据字符串在发布请求中没有意义,但是我已经用空数据字符串检查了它,它运行得很安静。

答案 1 :(得分:2)

你可以使用像zend这样的框架。框架通常有多个适配器(curl,socket,proxy)。

这是ZF2的样本:

    $request = new \Zend\Http\Request();
    $request->setUri('[url]');
    $request->setMethod(\Zend\Http\Request::METHOD_POST);
    $request->getPost()->set('key', $value);

    $client = new \Zend\Http\Client();
    $client->setEncType('application/x-www-form-urlencoded');

    $response = false;
    try {
        /* @var $response \Zend\Http\Response */
        $response = $client->dispatch($request);
    } catch (Exception $e) {
        //handle error
    }

    if ($response && $response->isSuccess()) {
        $result = $response->getBody();            
    } else {
        $error = $response->getBody();
    }

您不必使用整个框架只需包含(或自动加载)您需要的类。

答案 2 :(得分:1)

使用php中的cURL

<?php
// A very simple PHP example that sends a HTTP POST to a remote site
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://example.com/feed.rss");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"postvar1=value1&postvar2=value2");

// in real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS, 
//          http_build_query(array('postvar1' => 'value1')));

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

$server_output = curl_exec ($ch);

curl_close ($ch);

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

?>

了解更多信息,请参阅此PHP Difference between Curl and HttpRequest

答案 3 :(得分:0)

建议的卷曲方法略有变化,我解码返回的json,如this snippet