0

私はこの方法を持っています:

protected function _sendRequest($url, $method, Busca_Cxense_Data $data, $get = null) {
    if (! isset ( $this->_urls [$url] )) {
        throw new Busca_Cxense_Exception_Argument ( "El tipo de url enviado no es valido. (type: {$url})" );
    }
    $url = $this->_urls [$url] . $data->getUrlKey () . ($get ? "$get" : '');
    $httpConfig = array ('http' => array ('method' => $method, 'request_fulluri' => $url, 'ignore_errors' => false ) );
    if ($data->getSendJson ()) {
        $json = $this->_setJson ( $data );
        $header = "Content-Type: application/json\r\nContent-Length: " . strlen ( $json );
        $httpConfig ['http'] ['content'] = $json;
    } else {
        $header = "Content-Type: text/html";
    }
    $httpConfig ['http'] ['header'] = $header;
    $context = stream_context_create ( $httpConfig );
    $stream = fopen ($url, 'r', false, $context);
    $result = stream_get_contents($stream);
    $headers = stream_get_meta_data($stream);
    fclose($stream);
    if (! $result) {
        print_r ( $data );
        var_dump ( $url );
        print_r ( $httpConfig );
        throw new Busca_Cxense_Exception_MethodCall ( "Bad call. \nString: $json\n" );
    }
    var_dump($result); exit;
    return array ('json' => json_decode ( $result ), 'string' => $result, 'headers' => $headers );
}

ご覧のとおり、コンテキストを作成してストリームを開きます。しかし、私には非常に奇妙なエラーがあります。このURLを送信した場合:

http://sandbox.cxsearch.cxense.com/api/search/levelup?p_aq=query%28category^1:%22preview%20trailer%22,token-op=or%29&p_sm=idobject:desc&p_s=0&p_c=20&p_dr=title

不正なリクエストエラーがスローされますが、これをもう1つ送信すると、次のようになります。

http://sandbox.cxsearch.cxense.com/api/search/levelup?p_q=test&p_sm=idobject:desc&p_s=0&p_c=20&p_dr=title

期待どおりに動作します。URLなどをエンコードする必要がありますか?

修正済み 問題が何であるかを理解することができました。%20のスペースを変更するだけです。そしてそれがすべてでした...

4

2 に答える 2

0

400応答がリモートサーバーから返されるので、正しいクエリを作成する方法について、その側の仕様/連絡先を確認する必要があります。指定したURLは非常に異なって見え、リモートシステムには、値、提供されたパラメータのリストなどに関する独自の検証ルールがある場合があります。また、特定のヘッダーやリクエスト本文が必要になる場合があります。

于 2012-05-18T18:39:38.133 に答える
0

私は問題が何であるかを理解することができました。%20のスペースを変更するだけです。そしてそれがすべてでした...

于 2012-05-21T18:59:42.943 に答える