2011-01-10 7 views
2

Ich benutze YQL in PHP mit file_get_contents, um eine Abfrage zu senden. Ich verwende YQL für die Extraktion von Termen, daher enthält meine Abfrage eine große Menge an Text. Leider macht dies die URL zu lang und gibt einen Fehler zurück. Es funktioniert gut, wenn ich viel weniger Text verwende.PHP/YQL/GET: URL zu lang

Ist der einzige Weg, wie ich eine SELECT-Anweisung auf YQL mit GET verwenden kann, und welche anderen Optionen habe ich neben der Verwendung einer kleineren Menge an Text?

+0

Versuchen Sie, Curl mit Post zu verwenden? file_get_contents mit Stream? – ajreal

+0

Haben Sie stattdessen eine POST-Anfrage versucht? – Thai

Antwort

1

Ist die einzige Art, wie ich eine SELECT-Anweisung auf YQL mit GET verwenden kann, und welche andere Möglichkeiten habe ich neben eine geringere Menge an Text mit?

Wie andere bereits gesagt haben, können Sie eine POST-Anfrage anstelle von GET verwenden. Unten ist ein Beispiel mit file_get_contents() mit einem Stream-Kontext. cURL oder irgendein anderer Ferninhaltsabruf-Code, der POST-Anfragen ausgeben kann, würde ebenfalls gut funktionieren.

$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 [email protected] and [email protected]' 
    )) 
))); 

$json = file_get_contents('http://query.yahooapis.com/v1/public/yql', false, $ctx); 
0

Warum verwenden Sie nicht CURL, anstatt mit der get-Variable abzufragen?

$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);