PHP/YQL/GET:URL 太长

发布于 2024-10-11 01:53:08 字数 179 浏览 6 评论 0原文

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

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

I'm using YQL in PHP with file_get_contents to send a query. I'm using YQL for term extraction so my query contains a large amount of text. Unfortunately this renders the URL too long and returns an error. It works fine if I use a much smaller amount of text.

Is the only way I can use a SELECT statement on YQL with GET, and what other options do I have besides using a smaller amount of text?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飘过的浮云 2024-10-18 01:53:08

这是我在 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);

Is the only way I can use a SELECT statement on YQL with GET, and what other options do I have besides using a smaller amount of text?

As others have said, you can use a POST request instead of GET. Below is an example using file_get_contents() with a stream context. cURL or any other remote-content-fetching code which can issue POST requests would also work fine.

$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);
深海夜未眠 2024-10-18 01:53:08

为什么不使用 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);

Why don't you use CURL instead of querying with the get variable?

$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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文