【问题标题】:Getting curl response in Encoded form以编码形式获取卷曲响应
【发布时间】:2014-10-09 05:54:58
【问题描述】:

我正在使用 curl 来获取半径内的 Zipcode,我为此编写了 curl,它在 Shell 中运行良好,但是当我在 PHP 中转换它时,我得到了编码响应。我的代码如下

php代码是

$headers = array(
    'Referer:http://www.freemaptools.com/find-zip-codes-inside-radius.htm',
    'User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
    'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding:gzip, deflate',
    'Accept-Language:en-US,en;q=0.5',
    'Connection:keep-alive',
    'Pragma:no-cache',
    'Cache-Control:no-cache',
    'Origin:http://www.freemaptools.com',
    'Content-Type:text/plain; charset=UTF-8'        
);


$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'http://www.freemaptools.com/ajax/get-all-zip-codes-inside.php?radius=50&lat=36.7017377&lng=-95.87759640000002&rn=8523');
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handle, CURLOPT_COOKIE, " __utma=126142042.1539287389.1412828292.1412828292.1412828292.1; __utmb=126142042.1.10.1412828292; __utmc=126142042; __utmz=126142042.1412828292.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt=1");


$buffer = curl_exec($curl_handle);


curl_close($curl_handle);


echo '<pre>'; print_r($buffer);

响应类似于

‹Å—OoÓ@Å¿J”;aÿÍήÔVZÚmÕõÛinT¨ZDÃ&gt;=“TY«JØÊ%ÎÁ¿Ì{3og¾ÝüørûãñäèéËè÷Ý÷ŸnǵÖãÑ×›õñXãDXé•¡çûÏÇã7&amp;AJ?}¼[ÿ:Ÿ†2®èááçýæñ2•Í4]ÆŠ~{\߬é}õx´¾ûvûûá~óöñèíËLØÊ*#2ÓN$"*ÈÌYX4añ~Z0ÿmO020§+¼Ó38ŸÇÕõ¼(â%oKÜ‘Áä2£TÕŽ|C5/§ƒPY½R²šQ½qÝŽ:סC@x©B9ËÜÂ[ÈUÎS&gt;Ä!¬µ\kx©ÔSÂ/vÔ«X-Aò6Ön;)íè(é6³ô„lVUê-!äi'dXŵE>7ðÆÏ¦e¦:LcÆ¥‹Ã©ÄA/1Wø.Te}Š¢/R·HÔÜGá ¤QŠ!›“ÖÏftêO”ʽц¡ jV-M‹N^WCÃÿC[†V«N; Mx-´dhDÇãÉ´6{}:‹EY>Ui«zo"¶Díì()‰3±U¼LUìÍtŒI)ÜñÖJ°·ƒ1Ï ©¥—ÜT-d›†§©(æåsS›EQ‡½©,.¼Ò[ HÛÅè–zÊ!zH1GiJ;êšœ|ÚœÅ",·LËÐì_¦gHmÝ2•4-rÉW¦ÃËÔÜPM‡/hmk›è ÌúªjØ∼XtÞØ®'èsóìý€À$µ‚>ØéU^¼À6)ÈZVy-<çz‹RdykZ®«UÏ:S´RJ¯eV¶ }úNˆcÂÒM¡»~9:BÚt½ŽÕ Ý㘦žîHºV¢Î»eÙ×BÇvÛÍ=ж8ê^GqžÃn¹*;ò÷‰|û|<ùÃr6…j

请帮助我的代码有什么问题,我们将不胜感激。

【问题讨论】:

    标签: php curl


    【解决方案1】:

    您将获得与您的 shell 脚本中相同的输出:

    $headers = array(
        'Referer:http://www.freemaptools.com/find-zip-codes-inside-radius.htm',
        'User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
        'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language:en-US,en;q=0.5',
        'Connection:keep-alive',
        'Pragma:no-cache',
        'Cache-Control:no-cache',
        'Origin:http://www.freemaptools.com',
        'Content-Type:text/plain; charset=UTF-8'    
    );
    
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, 'http://www.freemaptools.com/ajax/get-all-zip-codes-inside.php?radius=50&lat=36.7017377&lng=-95.87759640000002&rn=8523');
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_handle, CURLOPT_HEADER, 1); 
    curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl_handle, CURLOPT_COOKIE, " __utma=126142042.1539287389.1412828292.1412828292.1412828292.1; __utmb=126142042.1.10.1412828292; __utmc=126142042; __utmz=126142042.1412828292.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt=1");
    
    $buffer = curl_exec($curl_handle);
    
    $header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE);
    $body = substr($buffer, $header_size);
    
    curl_close($curl_handle);
    
    $body = strtr($body,array("<"=>"&lt;","&"=>"&amp;")); // for displaying html tags
    echo($body);
    

    在您的代码中,您也没有在结束时关闭“pre”标签,

    $curl_connection
    

    应该是

    $curl_handle
    

    【讨论】:

      【解决方案2】:

      添加

      curl_setopt($curl_handle, CURLOPT_ENCODING, "gzip");
      

      并将其设置为 0,这样您就不会返回 http 标头

      curl_setopt($curl_handle, CURLOPT_HEADER, 0);
      

      您告诉服务器您同意在可能的情况下使用Accept-Encoding:gzip, 接收压缩数据

      结果将是响应的 HTTP 标头(如果 CURLOPT_HEADER = 0,则不存在)+ XML

      <markers><marker zipcode="67333" lat="37.061924" lng="-95.875119" 
      city="CANEY" county="MONTGOMERY" state="KS" timezone="6" /> and so on
      

      当然你的浏览器不会显示它。制作echo hmltentities($buffer);(在这种情况下不需要pre),你会看到它。

      【讨论】:

      • 当我添加这个然后得到空白页
      • 因为您正在接收 xml.. 您希望在浏览器中看到什么?我在答案中显示输出。
      • 仍然出现空白页
      • @Vinie 启用显示 php 错误。一个错误在这里curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 当我运行它时,一切都在我的代码中工作。这就是我正在运行的 - pastebin.com/u2u7UX27
      • 对不起,没有得到任何回应):
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2021-01-03
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多