4

我正在为不允许使用 CURL 的 Google App 引擎创建应用程序。据我所知, 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;}
4

4 回答 4

9

您是否查看过Urlfetch 文档链接的有关包装器的 PHP 文章?您可以使用这个live shell进行试验。

代码可以翻译成类似:

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;
}
于 2013-08-07T23:24:03.693 回答
6

这是一个简单的库,它用 urlfetch 替换 curl 本机函数。https://github.com/azayarni/purl

于 2014-02-05T15:05:45.437 回答
2

这里有人建议使用来自 azayarni 的 PURL。让我警告你:避免在 Google App Engine 上使用它。我花了几天时间试图让它工作但没有成功:谷歌 PHP 客户端 SDK 正在重写自己的一些 CURL 函数,只是 PURL 把它搞砸了。有些事情奏效了,有些则没有。URLFETCH 工具更加简单和安全。

于 2014-11-11T10:19:00.277 回答
1

这是一个非常古老的帖子,但只是一个更新:Google App Engine现在通过其 PHP 5.5 运行时支持 cURL 。

于 2015-05-18T13:36:29.397 回答