PHP curl响应因网络而异(编码问题?)

5
我有一个PHP/JS页面,通过JQuery ajax调用另一个PHP脚本来调用REST服务并将响应发送回PHP/JS页面。我这样做是因为我无法找到一种非JSONP的方法从JS中调用服务(不同的域)。
总之,在家里可以完美地工作。我在办公室部署后首先遇到了像这样的apache错误:
问题(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';

谢谢你的建议。


在哪个阶段似乎会出现编码不同的问题?是 REST、Ajax 还是浏览器请求?请确保在任何地方都使用相同的编码,首选为 UTF-8。 - Daniel W.
当你说在工作和家里的结果不同的时候,你是将代码移动到不同的服务器还是只是从不同的位置连接到同一台服务器?如果服务器端是一致的,那么你应该确认问题是否发生在不同的浏览器和其他客户端因素上。此外,如果你可以检索原始响应,你应该比较在两种情况下发送的内容。 - Anthony
关于我遇到编码问题的时候,我需要将从服务中获取的内容记录到磁盘上以确保。我知道我发送的内容是正确的,因为我收到了响应,但是当它到达发出ajax请求的页面时,我知道它存在问题。一旦我检查过后,我会更新这个问题。 - chrismead
1个回答

5
我从其他的堆栈问题这里中找到了它,它也解决了我的问题,看起来像是curl版本的问题。
将此选项添加到您的curl处理程序中:
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接