【问题标题】:How to retrieve full Zend_Http_Client GET URI?如何检索完整的 Zend_Http_Client GET URI?
【发布时间】:2012-02-07 09:44:44
【问题描述】:

我有类似的东西:

    $client = new Zend_Http_Client('http://www.site.com');
    $client->setParameterGet(array(
        'platform'     => $platform,
        'clientId'     => $clientId,
        'deploymentId' => $deploymentId,
    ));

    try {
        $response = $client->request();
        ...

这将生成类似于“http://www.site.com/?plataform=..?clientid?...”的请求。 有没有办法可以检索此 GET 请求生成的完整 URL? 亲切的问候,

【问题讨论】:

    标签: php zend-http-client


    【解决方案1】:

    令人惊讶的是,没有直接的方法可以获取完整的请求字符串。 但是

    1. 请求完成后,您可以检查 $client->getLastRequest ()。
    2. 如果您需要知道 ?plataform=..?clientid 是什么?的一部分 请求是有技巧的。

    function getClientUrl (Zend_Http_Client $client)
    {
        try
        {
            $c = clone $client;
            /*
             * Assume there is nothing on 80 port.
             */
            $c->setUri ('http://127.0.0.1');
    
            $c->getAdapter ()
                ->setConfig (array (
                'timeout' => 0
            ));
    
            $c->request ();
        }
        catch (Exception $e)
        {
            $string = $c->getLastRequest ();
            $string = substr ($string, 4, strpos ($string, "HTTP/1.1\r\n") - 5);
        }
        return $client->getUri (true) . $string;
    }
    
    $client = new Zend_Http_Client ('http://yahoo.com');
    $client->setParameterGet ('q', 'search string');
    
    echo getClientUrl ($client);
    

    【讨论】:

    • “有窍门”还是“有窍门”? :) 不管怎么说,还是要谢谢你。我很惊讶从来没有人有过这样的需求......甚至可能值得重写整个课程并添加这样的功能......
    • 这是一个棘手的技巧。如果你有兴趣,我可以给你一个线索。
    • 哦,是的,请!这对我有很大帮助! :)
    • 这个想法是打开与服务器本身的连接并从套接字读取 HTTP 标头。但是我忘记了我不能在 PHP 中拥有线程,并且 Zend_Http_Client 会阻止脚本执行。因此,只剩下第一种方法。
    • 但是,如果你不想向远程服务器发起请求,你可以在自己的服务器上创建哑服务,然后检索$client->getLastRequest()。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2013-06-25
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多