Я создаю приложение для механизма Google App, где CURL не допускается. Насколько я знаю, urlFetch – лучшая альтернатива.
Я не знаю, могу ли я достичь такого же результата с помощью urlFetch, но я действительно был бы очень признателен, если бы кто-нибудь, у кого больше опыта, мог помочь мне.
План состоял в том, чтобы преобразовать следующие запросы CURL в urlFetch. Если кто-то может указать мне в правильном направлении или предложить лучшую альтернативу, я бы очень признателен.
public function postCall($endpoint, $post_data, $param1, $param2, $json=1, $headers=false) { $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $this->options['url'].$endpoint); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); if ($headers && is_array($headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $post_data['req_token'] = $this->hash($param1, $param2); curl_setopt($ch, CURLOPT_POST, count($post_data)); if (!$headers) curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); else curl_setopt($ch,CURLOPT_POSTFIELDS, $post_data); $this->debug('POST params: ' . json_encode($post_data)); $result = curl_exec($ch); if ($result === false) { $this->debug('CURL error: '.curl_error($ch)); return false; } $this->debug('HTTP response code' . curl_getinfo($ch, CURLINFO_HTTP_CODE)); $this->debug('POST return ' . $result); // close connection curl_close($ch); if ($json) return json_decode(utf8_encode($result), true); else return $result;}
Вы посмотрели документацию Urlfetch и связанную статью PHP об обертках ? Вы можете экспериментировать с этой живой оболочкой .
Код можно перевести на что-то вроде:
public function postCall($endpoint, $post_data, $param1, $param2, $json=1, $headers=false) { $post_data['req_token'] = $this->hash($param1, $param2); $this->debug('POST params: ' . json_encode($post_data)); $data = http_build_query($post_data); $options = array("http"=> array( "method" => "POST", "content" => $post_data, ) ); if ($headers && is_array($headers)) { $options["http"]["header"] = $headers; } $context = stream_context_create($options); $result = file_get_contents("http://app.com/path?query=update", false, $context); if ($result === FALSE) { $this->debug('Error: '. print_r($http_response_header)); return FALSE; } $this->debug('Response headers:' . print_r($http_response_header)); // To get the status code you would need to parse that response $this->debug('POST return ' . $result); if ($json) return json_decode(utf8_encode($result), true); else return $result; }
Вот простая библиотека, которая заменяет собственные функции curl на urlfetch. https://github.com/azayarni/purl
Кто-то здесь предложил использовать PURL из азаярни. Позвольте мне предупредить вас: не используйте его в Google App Engine. Я провел НЕБОЛЬШИЕ дни, пытаясь заставить его работать без успеха: SDK Google PHP Client переписывает себе некоторые функции CURL, и просто PURL сильно его пугает. Некоторые вещи работали, а некоторые – нет. Инструмент URLFETCH намного проще и безопаснее.
Это старый пост, но только обновление. Механизм Google-приложений теперь поддерживает cURL со своим временем выполнения php 5.5.