cURL响应不可读

10

我有一个cURL响应的问题,当我尝试调用WSDL方法时,从浏览器中收到了一些奇怪的文本。

�d�ْ�<�_��[�74eS�@���8 �]��Q��A���>�t�,����]�1��%Y���4!l�^ZG��,8��v��������#ZJ�W��
r)0Ek����Q�����"Ᏹ�!�0��0����(�T�$���� Z��փ��UU���g������&�C�f
8�!��5��L�t{����6�?{jY�Q��?���K����3�D2�e   �߱Oc����@^P��$�IΠ�4A[;�p�\7�����i5��+�\歖~=����)�����a�L�GJey�F����Ɍ��v]��<��z������N����\z��.�i:�S5��FgkM�hS���|,\�0�E9i=�+ӄ�!^WҶ�7�����0�w���+b�۹��[�;���fE4_ڑ�������u�Q)E��;�;�JL���������Ԩ�1��7[�$D���\�W���ۂU$9���

我该怎么解决这个问题?

这是我的标题

$headers = array(
                "Accept-Encoding: gzip, deflate",
                "Content-Type: text/xml;charset=\"UTF-8\"",
                "SOAPAction: \"http://tempuri.org/"",
                "Host: domain.com",
                "Content-length: ".strlen($xml_post_string),
                "Connection: Keep-Alive"
                ); 

以下是我的curl选项:

curl_setopt($soap_do, CURLOPT_URL,            $url);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($soap_do, CURLOPT_TIMEOUT,        120);
curl_setopt($soap_do, CURLOPT_AUTOREFERER,    true); // new
curl_setopt($soap_do, CURLOPT_MAXREDIRS,      10);   // new
curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, true); // new
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST,           true );            
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $xml_post_string); 
curl_setopt($soap_do, CURLOPT_VERBOSE,        TRUE); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $headers);

5
请问回复是压缩成tar或zip格式的吗? - Bilal Akil
很奇怪,因为昨天我刚开始写这段代码,然后我收到一个可读的错误信息:"refNo未找到",但现在我不明白发生了什么。响应应该是纯文本和易于理解的。 - PHP
1
您明确地要求使用 Accept-Encoding: gzip, deflate 请求内容的压缩版本(如果有的话)。 - CBroe
天哪!我需要做什么才能让它易于阅读? - PHP
2
尝试仅删除 Accept-Encoding: gzip, deflate 标头。 - Grokify
显示剩余2条评论
2个回答

14

感谢您的评论,我已解决了这个问题,向Grokify致敬。我只是删除了Accept-Encoding: gzip, deflate,现在可以读取。


-1

我曾经遇到过类似的问题。加入工作标头(根据我的浏览器)解决了我的问题。

目前我的有效代码:

$headers = array("User-Agent: ********User Agent********");
$ch = curl_init("******URL*******");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data= curl_exec($ch);
curl_close($ch);

1
你相对于问题中的头文件进行了很多修改,但没有解释每个修改的原因。半个十年前的答案只做了最小限度的修改来解决问题。 - Quentin
亲爱的@Quentin,我从CURL中得到了无法阅读的输出,添加UserAgent解决了这个问题。因此,我将其发布,以便其他人在查看此帖子时也尝试此方法,尽管您是正确的,这不是对特定情况的直接回答。 - M at

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