【问题标题】:PHP/YQL/GET: URL too longPHP/YQL/GET: URL 太长
【发布时间】:2011-06-06 09:13:48
【问题描述】:

我在 PHP 中使用 YQL 和 file_get_contents 来发送查询。我使用 YQL 进行术语提取,因此我的查询包含大量文本。不幸的是,这会导致 URL 太长并返回错误。如果我使用更少量的文本,它工作得很好。

是我可以在 YQL 上使用 SELECT 语句和 GET 的唯一方法吗?除了使用少量文本之外,我还有哪些其他选择?

【问题讨论】:

  • 尝试使用 curl 和 post ? file_get_contents 与流?
  • 您是否尝试过 POST 请求?

标签: php json http file-get-contents yql


【解决方案1】:

为什么不使用 CURL 而不是使用 get 变量进行查询?

$c = curl_init("http:/query.yahooapis.com/v1/public/yql?q=myverylongquery&format=json");
curl_setopt($c, CURLOPT_RETURNTRANSFERT, 1); // returns the data into the variable
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 20); // query times out after 20 seconds

$data = json_decode(curl_exec($c)); // I asked for data format to be in json in the query
curl_close($c);

【讨论】:

    【解决方案2】:

    是我可以在 YQL 上使用 SELECT 语句和 GET 的唯一方法吗?除了使用少量文本之外,我还有哪些其他选择?

    正如其他人所说,您可以使用 POST 请求而不是 GET。下面是一个使用file_get_contents() 和流上下文的示例。 cURL 或任何其他可以发出 POST 请求的远程内容获取代码也可以正常工作。

    $ctx = stream_context_create(array('http' => array(
        'method'  => 'POST',
        'header'  => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query(array(
            'context' => $my_really_really_huge_context,
            'query'   => $query,
            'format'  => 'json',
            'q'       => 'SELECT * FROM search.termextract WHERE context=@context and query=@query'
        ))
    )));
    
    $json = file_get_contents('http://query.yahooapis.com/v1/public/yql', false, $ctx);
    

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多