5

我有一个 PHP/JS 页面,它使 JQuery ajax 调用另一个 PHP 脚本,该脚本调用 REST 服务并将响应发送回 PHP/JS 页面。我这样做是因为我找不到从 JS(不同域)调用服务的非 JSONP 方式。

无论如何,在家里它工作得很好。我在办公室部署,首先遇到这样的 apache 错误:

Chunked-Encoded 数据中的问题 (2)

我可以通过在我的 curl 选项中添加: CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0 来解决这个问题。

然而,现在通过的数据在菱形中有一个问号,开头和结尾的字符不属于,等等。据我发现这可能是一个编码问题,但我努力修复它确实不行。

同样,在家工作也很完美……而不是工作。

非常感谢任何帮助

------------------------------ 编辑如下------------------ ------------

编码问题首先出现在服务返回的响应中。这是发送/接收的代码:

            $request_headers    = array();
            $request_headers[]  = 'Content-Type: application/json';
            $request_headers[]  = 'Authorization: Bearer ' . $token;

            $options = array(
                CURLOPT_URL            => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HEADER         => false,
                CURLOPT_VERBOSE        => true,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_ENCODING       => '',
                CURLOPT_AUTOREFERER    => true,
                CURLOPT_CONNECTTIMEOUT => 120,
                CURLOPT_TIMEOUT        => 120,
                CURLOPT_MAXREDIRS      => 10,
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_HTTPHEADER     => $request_headers,
                    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_0
            );

            curl_setopt_array( $ch, $options );
            $response = curl_exec($ch); 

我将 $response 记录到磁盘并在 JSON 之前看到一个 ó,在它之后看到一个 Ê。

------------------------------ 第二次编辑如下-- ------------

我显然需要更改为: $request_headers[] = 'application/x-www-form-urlencoded';

感谢您的提示。

4

1 回答 1

5

我在这里从其他一些堆栈问题中找到了它,它也解决了我的问题,它看起来像 curl 版本问题。

将此选项添加到您的 curl 处理程序中:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
于 2014-04-27T10:43:26.527 回答