以编码形式获取卷曲响应


Getting curl response in Encoded form

我正在研究 curl 以获得半径内的邮政编码,我为此编写了 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Ã>=“TY«JØÊ%ÎÁ¿Ì{3og¾ÝüørûãñäèéËè÷Ý÷ŸnǵÖãÑ×›õñXãDXé•¡çûÏÇã7&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>Ä!¬µ' kx©ÔSÂ/vÔ«X-Aò6Ön;(íè(é6³ô"lVUê-!äi'dXÅμE>7ðÆϦe¦:LcÆ¥‹Ã©ÄA/1Wø.Te}Š¢/R·HÔÜGá¤QŠ!›"ÖÏftêO"Ê1/2ц¡jV-M‹NˆWCÃÿC[†V«N;Mx-'dhDÇãÉ '6{}:‹EY>Ui«zo"¶Díì((‰3±U1/4LUìÍtŒI(ÜñÖJ°·ƒ1Ï © ¥—ÜT-d›†§©(æåsS›EQ‡1/2©,.1/4Ò[HÛÅè–zÊ!zH1GiJ;êšœ|ÚœÅ",·LËÐ ì_¦gHmÝ2•4-rÉW¦ÃËÔÜPM‡/hmk›èìúªjØ ̃XtÞØ'èsóìý®€À$μ'><ø><=Ë|i?äáN'æNJÓq...õ7cS'¦''ÙÃ1/4l2;秦祁÷'ö£sè'uÍ6•ƒbø‰B;'lyôœŸyWa9[ÔL؃–ˬ°hyïÐDjowÄ*Ðö5ˆ'Û¤Ùå:Ùº³ © %y$ë‹yhÒæ1/21/2"Ež ̄Tç® Øé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

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

添加

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

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

curl_setopt($curl_handle, CURLOPT_HEADER, 0);

您告诉服务器,您同意在可能的情况下接收 gzip 数据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);(在这种情况下不需要预先(,您将看到它。

您将获得与 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