【问题标题】:Content-length in php file_get_content post requestphp file_get_content 发布请求中的内容长度
【发布时间】:2014-01-03 07:36:42
【问题描述】:

我正在尝试通过 php 发布请求更新 Google 融合表。 URL 在Auth PlayGround 上工作得很好。见下图。对不起!堆栈溢出不允许我发布图片,请使用此链接Image

但是当我使用 php post request file_get_content 尝试相同的操作时,它会出现错误“411 Length Required”。代码要求的长度是多少。显然它不是内容长度,因为在这种情况下它是“零”。

<?php
$url = https://www.googleapis.com/fusiontables/v1/query?sql=INSERT INTO 1f_Z_********bQ-br8g17rFWBknri03fz-EQc (Name, Phone) VALUES ('Anees Hameed', '9895435751')
$Post = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'header'  => 'GData Version: 3.0',
        'header'  => 'Authorization: Bearer '.$_Session[access_token]
    )
);
$Post= stream_context_create($Post);
$request = file_get_content($url, false, $Post);
?>

如何摆脱这个错误。

【问题讨论】:

  • 使用curl 而不是file_get_content
  • curl is not allowed..我正在使用不允许 curl 的 Google App Engine :(

标签: php google-data-api


【解决方案1】:

首先,您的代码中的 URL 是什么?!而且你也没有用引号括起来。

411 错误

此错误很少发生在大多数 Web 流量中,尤其是当 客户端系统是一个 Web 浏览器。问题只能通过 检查您的客户端系统正在尝试做什么,然后与 您的 ISP 为什么 Web 服务器需要“内容长度”规范。

和你的代码:

<?php
$url = "https://www.googleapis.com/";
$content = "this is something to be sent to the server";
$Post = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'header'  => 'GData Version: 3.0',
        'header'  => 'Authorization: Bearer '.$_Session[access_token],
        'header'  => 'Content-Length: '.strlen($content)
    )
);
$Post= stream_context_create($Post);
$request = file_get_content($url, false, $Post);
?>

【讨论】:

  • Opps 我错过了引号,Url 是一样的 ** $url = "googleapis.com/fusiontables/v1/query?sql=INSERT INTO 1f_Z_********bQ-br8g17rFWBknri03fz-EQc (Name, Phone) VALUES (' Anees Hameed', '9895435751')"; ** 这在 Google Auth Playground.. 中完美运行。此请求中没有正文内容,所有内容都通过 url 作为 post 请求发送,因此没有 Content-length。
  • @AneesHameed 你应该发送一个示例内容来查看服务器的行为。
  • @revo- 我会检查 urlencode。将示例内容发送到服务器并检查其行为是什么意思。
  • @All: 如何使用这样的标头 $post= array('http' => array( 'ignore_errors' => '1' ));会有什么不同吗...
  • 是的,我已经尝试过了,但它不起作用。说同样的错误“需要411长度”。我不知道他们要求什么长度。 :)
猜你喜欢
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2017-05-25
  • 2018-07-12
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多