【问题标题】:odd IE9 with xml, php, curl带有 xml、php、curl 的奇怪 IE9
【发布时间】:2011-12-06 21:47:32
【问题描述】:

我有一个使用 curl、xml 与 UPS 通信的 php 函数。脚本是给我的,我不太了解它。

它适用于除 IE9 以外的所有浏览器

函数返回如下内容:

HTTP/1.1 200 OK 日期:2011 年 12 月 6 日星期二 21:36:41 GMT 服务器:Apache Pragma: no-cache Content-Length: 1481 X-Powered-By: Servlet/2.5 JSP/2.1 变化:用户代理内容类型:应用程序/xml

它继续显示所有响应 来自 xml 中的 ups

这里是带有 curl 和 xml 参数的函数。

function ups($dest_zip,$service,$weight,$length,$width,$height) {

        // This script was written by Mark Sanborn at http://www.marksanborn.net
        // If this script benefits you are your business please consider a donation
        // You can donate at http://www.marksanborn.net/donate.

        // ========== CHANGE THESE VALUES TO MATCH YOUR OWN ===========

          $AccessLicenseNumber = '000000009F002AC0'; // Your license number <br>
          $UserId = '+++++'; // Username <br>
          $Password = '+++++'; // Password <br>
          $PostalCode = '01862'; // Zipcode you are shipping FROM <br>
          $ShipperNumber = '++++'; // Your UPS shipper number <br>

        // =============== DON'T CHANGE BELOW THIS LINE ===============


            $data ="<?xml version=\"1.0\"?>
            <AccessRequest xml:lang=\"en-US\">
                <AccessLicenseNumber>$AccessLicenseNumber</AccessLicenseNumber>
                <UserId>$UserId</UserId>
                <Password>$Password</Password>
            </AccessRequest>
            <?xml version=\"1.0\"?>
            <RatingServiceSelectionRequest xml:lang=\"en-US\">
                <Request>
                    <TransactionReference>
                        <CustomerContext>Bare Bones Rate Request</CustomerContext>
                        <XpciVersion>1.0001</XpciVersion>
                    </TransactionReference>
                    <RequestAction>Rate</RequestAction>
                    <RequestOption>Rate</RequestOption>
                </Request>
            <PickupType>
                <Code>01</Code>
            </PickupType>
            <Shipment>
                <Shipper>
                    <Address>
                        <PostalCode>$PostalCode</PostalCode>
                        <CountryCode>US</CountryCode>
                    </Address>
                <ShipperNumber>$ShipperNumber</ShipperNumber>
                </Shipper>
                <ShipTo>
                    <Address>
                        <PostalCode>$dest_zip</PostalCode>
                        <CountryCode>US</CountryCode>
                    <ResidentialAddressIndicator/>
                    </Address>
                </ShipTo>
                <ShipFrom>
                    <Address>
                        <PostalCode>$PostalCode</PostalCode>
                        <CountryCode>US</CountryCode>
                    </Address>
                </ShipFrom>
                <Service>
                    <Code>$service</Code>
                </Service>
                <Package>
                    <PackagingType>
                        <Code>02</Code>
                    </PackagingType>
                    <Dimensions>
                        <UnitOfMeasurement>
                            <Code>IN</Code>
                        </UnitOfMeasurement>
                        <Length>$length</Length>
                        <Width>$width</Width>
                        <Height>$height</Height>
                    </Dimensions>
                    <PackageWeight>
                        <UnitOfMeasurement>
                            <Code>LBS</Code>
                        </UnitOfMeasurement>
                        <Weight>$weight</Weight>
                    </PackageWeight>
                </Package>
            </Shipment>
            </RatingServiceSelectionRequest>";
            $ch = curl_init("https://www.ups.com/ups.app/xml/Rate");
            //curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch,CURLOPT_POST,0);
            curl_setopt($ch,CURLOPT_TIMEOUT, 60);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
            $result=curl_exec ($ch);
        echo '<!-- '. $result. ' -->'; // THIS LINE IS FOR DEBUG PURPOSES ONLY-IT WILL SHOW IN HTML COMMENTS
            $data = strstr($result, '<?');
            $xml_parser = xml_parser_create();
            xml_parse_into_struct($xml_parser, $data, $vals, $index);
            xml_parser_free($xml_parser);
            $params = array();
            $level = array();
            foreach ($vals as $xml_elem) {
             if ($xml_elem['type'] == 'open') {
            if (array_key_exists('attributes',$xml_elem)) {
                 list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
            } else {
                 $level[$xml_elem['level']] = $xml_elem['tag'];
            }
             }
             if ($xml_elem['type'] == 'complete') {
            $start_level = 1;
            $php_stmt = '$params';
            while($start_level < $xml_elem['level']) {
                 $php_stmt .= '[$level['.$start_level.']]';
                 $start_level++;
            }
            //$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
            if (isset($xml_elem['value'])) {
                $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
                }
                else {
                $php_stmt .= '[$xml_elem[\'tag\']] = "";';
                }

            eval($php_stmt);
             }
            }
            curl_close($ch);
            return $params['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE'];
        }

页面不会呈现 HTML

我不知道我在做什么。帮助!

【问题讨论】:

  • 尝试使用 HTML4... 不,只是拖钓。粘贴一些代码或链接。尝试通过 PHP 发送Content-Type: text/html...
  • 找到了!!!!这是回声声明.... DOH!感谢所有帮助过我的人.. +1 周围的人

标签: php html xml


【解决方案1】:

仔细检查是否未启用标头的输出

curl_setopt($curl_handle, CURLOPT_HEADER,1);

注释掉该行或将其设置为 false。

【讨论】:

  • 感谢您的回复 curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_TIMEOUT, 60); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch,CURLOPT_POSTFIELDS,$data);那我设置为 0 吗?
  • 在不知道代码是否需要标头信息作为其处理的一部分的情况下,尝试将其设置为 0 并查看结果。一般来说,除非有特定原因(例如获取 cookie 信息或位置重定向),否则不会使用这种选项
  • 感谢 scuzzy:我设置为 0 并尝试注释掉,它无法呈现 html.. 我应该在引用函数时使用 include 吗?还是别的什么?
  • 我认为我们需要查看更多代码才能了解 curl 过程在做什么。某处会将 CURL 请求的响应转储到变量中,例如 $curl_result = curl_exec ($curl_handle);这可能是过早地回显或者存在一些不正确的处理。
  • 再次感谢您抽出宝贵时间。我完整地添加了实际功能。
猜你喜欢
  • 2019-07-25
  • 1970-01-01
  • 2020-08-09
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
相关资源
最近更新 更多